前端文件 下载导出 -- 2

前期有个 是使用二进制流下载文件的示例;而在这篇文章的方法一中,是要将接口返回的结果 转成二进制流;

方法一

请求体头部设置:responseType: 'arraybuffer'

// 导出报告
      handleExport(item) {
        this.$api.bizApi.qualityAssessment.downloadPdf({reportId: item.reportId}).then((res) => {
          this.download(item.reportName + '.pdf', res)
        })
      },
      download(fileName, content) {
        const url = window.URL.createObjectURL(new Blob([content], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'}))
        const link = document.createElement('a')
        link.href = url
        link.setAttribute('download', fileName) // 下载文件的名称及文件类型后缀
        document.body.appendChild(link)
        link.click()
        document.body.removeChild(link); // 下载完成移除元素
        window.URL.revokeObjectURL(url); // 释放掉blob对象
      },
方法二
/**
       * 下载
       * @param  {String} url 目标文件地址
       * @param  {String} filename 想要保存的文件名称
       */
      fileDownload(url, filename) {
        let self = this;
        let newFileName = "";
        let fileArr = url.split(".");
        let fileType = fileArr[fileArr.length - 1];
        if (filename) {
          newFileName = filename;
        } else {
          newFileName = "未命名." + fileType;
        }
        self.getBlob(url, function (blob) {
          self.saveAs(blob, newFileName);
        })
      },
      getBlob(url, cb) {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', url, true);
        xhr.responseType = 'blob';
        xhr.onload = function () {
          if (xhr.status === 200) {
            cb(xhr.response);
          }
        };
        xhr.send();
      },
      saveAs(blob, filename) {
        if (window.navigator.msSaveOrOpenBlob) {
          navigator.msSaveBlob(blob, filename);
        } else {
          let link = document.createElement('a');
          let body = document.querySelector('body');
          link.href = window.URL.createObjectURL(blob);
          link.download = filename;
          // fix Firefox
          link.style.display = 'none';
          body.appendChild(link);

          link.click();
          body.removeChild(link);
          window.URL.revokeObjectURL(link.href);
        }
      },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值