1. 后端
设置 header, 并将文件流返回
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + URLEncoder.encode("your file name", "UTF-8") + ".xlsx");
参考: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Disposition
2. 前端下载
2.1 浏览器托管下载
浏览器托管就是用 window.open 的方式下载,这个时候会根据 response.header 中的属性进行解析下载。不过对于要做权限验证的请求不太方便。可以用js的方式下载
window.location.href = '你的下载链接'
window.open('你的下载链接', '__blank');
2.2 js 下载
js 下载就是将内容转化成 Blob, 然后通过浏览器下载 Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。
如果想让返回内容是 blob 格式 需要设置 request.responseType = 'blob’
const blob = resp.data
const url = window.URL.createObjectURL(blob)
const a = document.createElement('a')
a.style.display = 'none'
a.href = url
a.download = '值班表.xlsx'
document.body.appendChild(a)
a.click()
window.URL.revokeObjectURL(url)
|