通过后端返回的url或者Blob二进制流下载对应的文件

/**
 * @desc 下载
 * @param {*} response - 请求返回数据 {data: Blob, headers: {}}
 * @param {string} fileName - 文件名称 '机构账号导出3.xlsx'
 * @example
 * const response = {data: Blob, headers: {content-disposition: ''}}
 * const fileName = '用户列表.xlsx'
 * down(response, fileName)
 */
export const down = function (response, fileName = '') {
  const blob = response.data;
  const aEle = document.createElement('a');
  const binaryData = [];
  binaryData.push(blob);
  if (!fileName) {
    // 没传文件名,就用后台的filename, 后台也没有传就。。。。
    const resHeader = response.headers['content-disposition'];
    if (resHeader === undefined) {
      console.error('数据为 undefined,无法导出!');
      return;
    }
    if (resHeader.indexOf('filename=') !== -1) {
      fileName = resHeader.split('filename=')[1];
    } else {
      fileName = resHeader.split('fileName=')[1];
    }
    fileName = decodeURIComponent(fileName || '');
  }
  // IE浏览器
  if(navigator.msSaveBlob) {
    return navigator.msSaveBlob(new Blob(binaryData), fileName)
  }
  aEle.href = window.URL.createObjectURL(new Blob(binaryData))
  aEle.download = fileName;
  aEle.click();
  window.URL.revokeObjectURL(aEle.href);
};

// 根据url地址下载
export const download = (url) => {
  var isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
  var isSafari = navigator.userAgent.toLowerCase().indexOf('safari') > -1;
  if (isChrome || isSafari) {
    var link = document.createElement('a');
    link.href = url;
    if (link.download !== undefined) {
      var fileName = url.substring(url.lastIndexOf('/') + 1, url.length);
      link.download = fileName;
    }
    if (document.createEvent) {
      var e = document.createEvent('MouseEvents');
      e.initEvent('click', true, true);
      link.dispatchEvent(e);
      return true;
    }
  }
  if (url.indexOf('?') === -1) {
    url += '?download';
  }
  window.open(url, '_self');
  return true;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值