使用ajax请求,后端返回给前端的文件流信息:!
前端使用jquery如何将它保存到本地,文件是PNG图片。
let res = await axios.post('/api/export-excel', payload, {
responseType: 'blob',
})
let fileName = 'test.xlsx'
let blob = res.data
if ('msSaveOrOpenBlob' in navigator) {
// ie使用的下载方式
window.navigator.msSaveOrOpenBlob(blob, fileName)
} else {
let elink = document.createElement('a')
// 设置下载文件名
elink.download = fileName
elink.style.display = 'none'
elink.href = URL.createObjectURL(blob)
document.body.appendChild(elink)
elink.click()
document.body.removeChild(elink)
}
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
你要看服务端返回数据的header里content-type是否是application/octet‑stream, 或者header里有没有Content-Disposition: attachment,只要有这两个其中一个,直接window.location.href= 链接,资源就自动下载到本地了,一般下载都是这么处理的,最好让后端配一下这两个其中一个
如果后端不方便配,或者其它原因,前端也是能处理的, 请求接口时让返回数据类型为 arrayBuffer, 原生ajax请求如下:
jquery的$.ajax貌似不支持arrayBuffer, 可以查查,其它像原生、fetch、axios都是支持的, 例如axios
拿到arrayBuffer数据后, 通过blob接受并下载, 如下