Vue的Excel文件下载

最早开始接触下载是后端直接返回一个链接,通过a标签直接下载,甚至再简单点直接window.open直接下载。恰巧今天第一次经历文件流下载,代码如下

this.$http.get(`xxx`).then((resp) => {
        console.log(resp);
        // debugger
        let blob = new Blob([resp.data],{
          type: 'application/octet-stream;charset=UTF-8'
        })
          let contentDisposition = resp.headers['content-disposition'] || '';
          let filename = contentDisposition.split('filename=')[1];
          filename = filename.replace(/"/g,"")

          let link = document.createElement("a");
          link.href = window.URL.createObjectURL(blob);
          link.download = filename;
          document.body.appendChild(link);
          link.click();
          window.URL.revokeObjectURL(link.href);

          // hack for firefox
          setTimeout(function(){
              document.body.removeChild(link);
          }, 1000); 
      })
      .catch((error) => {

      });

但是代码下载的文件一直提示文件已损坏,打不开,修复也不行,通过查阅相关资料以后才知道请求头需要加一个对象,告诉文件responseType为blob,然后就没问题了

 this.$http.get(`xxx`,{responseType: 'blob'}).then((resp) => {
        console.log(resp);
        // debugger
        let blob = new Blob([resp.data],{
          type: 'application/octet-stream;charset=UTF-8'
        })
          let contentDisposition = resp.headers['content-disposition'] || '';
          let filename = contentDisposition.split('filename=')[1];
          filename = filename.replace(/"/g,"")

          let link = document.createElement("a");
          link.href = window.URL.createObjectURL(blob);
          link.download = filename;
          document.body.appendChild(link);
          link.click();
          window.URL.revokeObjectURL(link.href);

          // hack for firefox
          setTimeout(function(){
              document.body.removeChild(link);
          }, 1000); 
      })
      .catch((error) => {

      });

axios文件

 export const get = (url, params) => {
    if(oAuth.getLocalStorage('access_token') != null) {
        axios.defaults.headers.common['Authorization'] = 'Bearer '+oAuth.getLocalStorage('access_token');
        if (!params){
            params={};
        }
    }
    // return axios.get(url,{params})
    return axios.get(url, {params})

 }

又是一次小白的自我检讨,各位拜拜!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值