实现表格导出功能时,后端接口返回一堆看不懂的乱码,第一反应是不是接口出错了,其实不是,后端直接返回了一个二进制流,前端需要通过blob对象来实现文件下载功能。
后端返回结果如下:

代码如下:
let param = {};
this.$http.post("/api/xxx/xxx/xxx",{
timeout:0,
params:param,
responseType:'blob'
}).then( res =>{
const content = res.data
const blob = new Blob([content])
const fileName = new Date()+'导出文件'
if ('download' in document.createElement('a')) {
// 非IE下载
const elink = document.createElement('a')
elink.download = fileName //命名下载名称
elink.style.display = 'none'
elink.href = URL.createObjectURL(blob) //表示一个指定的file对象或Blob对象
document.body.appendChild(elink)
elink.click() //点击触发下载
URL.revokeObjectURL(elink.href) // 释放URL 对象
document.body.removeChild(elink)
} else {
// IE10+下载
navigator.msSaveBlob(blob, fileName)
}
})
本文介绍了一种在前端处理后端返回的二进制流并实现文件下载的方法。通过设置HTTP请求的responseType为'blob',后端返回的数据可以被解析成Blob对象,再利用HTML5的a标签或IE10+的navigator.msSaveBlob方法实现不同浏览器下的文件下载。
1万+

被折叠的 条评论
为什么被折叠?



