之前导出文件都是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。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐