实现表格导出功能时,后端接口返回一堆看不懂的乱码,第一反应是不是接口出错了,其实不是,后端直接返回了一个二进制流,前端需要通过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)
}
})