[关闭]
@Wangww0925 2019-08-07T05:51:46.000000Z 字数 1447 阅读 256

vue+axios 下载带token验证的文件流

vue_axios


实现代码

全部代码:

  1. this.$http({
  2. url: `${process.env.API_ROOT}/debtTransferInfo/export?startTime=${this.exportInfo.startAndEndTime[0]}&endTime=${this.exportInfo.startAndEndTime[1]}`,
  3. method: 'get',
  4. responseType: 'blob',
  5. headers: {
  6. Authorization: this.$store.state.token
  7. }
  8. }).then((result)=>{
  9. if (result.data){
  10. let blob = new Blob([result.data],{
  11. type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" //将会被放入到blob中的数组内容的MIME类型
  12. })
  13. let url = window.URL.createObjectURL(blob); // 创建下载的链接
  14. let link = document.createElement('a');
  15. link.style.display = 'none';
  16. link.href = url;
  17. link.download= '债转业务报表.xlsx'; // 载后文件名
  18. document.body.appendChild(link);
  19. link.click(); // 点击下载
  20. document.body.removeChild(link); // 下载完成移除元素
  21. window.URL.revokeObjectURL(url); // 释放掉blob对象
  22. this.exportInfo.exportVisible = false; // 关闭弹窗
  23. }
  24. },(res)=>{
  25. console.log("res: ", res)
  26. })

以下对代码进行说明:

告诉服务器我们需要的响应格式
responseType: 'blob',

token:

  1. headers: {
  2. Authorization: this.$store.state.token
  3. }

文件流处理:

  1. let blob = new Blob([result.data],{
  2. type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" // 将会被放入到blob中的数组内容的MIME类型,此处是.xlsx文件
  3. })
  4. let url = window.URL.createObjectURL(blob); // 创建下载的链接

MIME类型参考: mime.json16.8kB

实现下载:

  1. let link = document.createElement('a');
  2. link.style.display = 'none';
  3. link.href = url;
  4. link.download= '债转业务报表.xlsx'; // 载后文件名
  5. document.body.appendChild(link);
  6. link.click(); // 点击下载
  7. document.body.removeChild(link); // 下载完成移除元素
  8. window.URL.revokeObjectURL(url); // 释放掉blob对象

作者 wendy
2019 年 7月 3日


参考文献

Vue | 实现带token验证的文件流下载
vue 下载二进制文件 没有终极解决方案

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注