Vue带token下载文件请求axios
带token请求后端下载文件
·
之前导出文件都是window.open()简单粗暴,整合JWT之后发现一直报401,不拦截导出请求又不安全,苦苦寻找俩小时终于解决了这个问题,随手记录下,主要还是参考的CSDN上其他博主的内容。
虽然request.js设置了统一给请求头加token,但是因为是打开新窗口下载所以这里带不上。索性自己手动设置了token。
handleExcelExport() {
axios.get('请求url', {
headers: {token: '你的token'},
responseType: 'blob',
}).then( response => {
let blob = new Blob([response.data],{
//这里的type要和后端一致
type:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
});
let Url = URL.createObjectURL(blob); //生成一个url
const a = document.createElement('a');
a.href = Url;
a.download = '文件名称.xlsx';
a.click();
window.URL.revokeObjectURL(Url);
})
},
其他遇见的出现的问题如下:
- 设置了responseType,但下载时还是显示文件已损坏或文件扩展名错误之类的,总之就是打不开。主要是检查前后端使用的文件type是否一致,区分.xls和.xlsx对应的写法。
- 预览响应内容是乱码。检查创建blob是使用的是response还是response.data。
更多推荐
已为社区贡献3条内容
所有评论(0)