最近做导出excel功能,后端返回文件流,前端vue导出excel打开失败,但是用postman测试可以正常打开。
// 前端演示代码
// 问题的原因就是responseType,一定要加上!!!
// 问题的原因就是responseType,一定要加上!!!
// 问题的原因就是responseType,一定要加上!!!
axios.post("/download/url", {
params,
responseType:"arraybuffer" // 或者blob,GET请求用blob??有待考证
}).then(res=>{
// 这里的type最好参考Response Headers里面的content-type,有可能是application/vnd.ms-excel
let blob = new Blob([res.data], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8'
})
// 获取文件名,根据自己需要的分割
let fileName = res.headers['content-disposition'].split(';')[1].split("=")[1]
let a = document.createElement('a')
let url = window.URL.createObjectURL(blob)
a.href = url
a.download = fileName
document.body.appendChild(a)
a.style.display = 'none'
a.click()
document.body.removeChild(a)
window.URL.revokeObjectURL(url)
})