在开发导出功能时,后端可能返回一的不是json文件地址而是一个二进制的文件流,当我们遇到这个问题我们需要怎么处理呢?(如图是我请求接口返回的文件流)
当导出接口请求正常时,我们前端会收到一个文件流如下图
我们在请求的接口加上一个配置,将文件转为blob responseType:'blob',
export function taskExport(data) {
return request({
url: `/deadwood/wtask/export`,
method: 'post',
responseType:'blob',
data:data
})
}
接口返回的数据如下图
将获取的blob进行处理
const blob = new Blob([res.data])
完整代码如下
//taskExport 是接口
taskExport(this.searchform).then(res=>{
const blob = new Blob([res.data])
const fileName = '文件名称'+ '.xlsx'
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, fileName)
} else {
const link = document.createElement('a')
link.href = window.URL.createObjectURL(blob)
link.download = fileName
link.click()
window.URL.revokeObjectURL(link.href) // 释放 URL 对象
}
console.log(res)
}).catch((error) => {
console.log(error)
})