blob文件下载记录

2022-12-29  本文已影响0人  爱代码的派派星
export function downloadBlob(
  data,
  name,
  type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
) {
  if (name) {
    if (name.lastIndexOf(".") < 0) {
      name += ".xlsx";
    }
  } else {
    name += ".xlsx";
  }
  let blob = new Blob([data], { type });
  if (window.navigator && window.navigator.msSaveOrOpenBlob) {
    window.navigator.msSaveOrOpenBlob(blob, name);
  } else {
    let objectUrl = URL.createObjectURL(blob);
    var a = document.createElement("a");
    a.download = name;
    a.href = objectUrl;
    a.click();
    document.body.appendChild(a);

    var evt = document.createEvent("MouseEvents");
    evt.initEvent("click", false, false);
    a.dispatchEvent(evt);
    document.body.removeChild(a);
  }
}

/**
 * 导出文件下载
 * @param  {[type]} res 后台返回response
 * @return {[type]}     [description]
 */
export function exportDownload(that,res){
  if (res.data.type == 'application/json') {
      // 将blob文件流转换成json
      const reader = new FileReader();
      reader.readAsText(res.data);
      reader.onload = function (event) {
        const message = JSON.parse(event.target.result).message;
        that.$message.error(message);
      }
      return false;
    }
    const blob = new Blob([res.data]);
    let str = res.headers['content-disposition'];
    let filename = decodeURI(str.substr(str.indexOf('=') + 1));
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
        //ie使用的下载方式
        window.navigator.msSaveOrOpenBlob(blob, filename);
     } else {
        let elink = document.createElement("a");
        // 设置下载文件名
        elink.download = filename;
        elink.style.display = "none";
        elink.href = URL.createObjectURL(blob);
        document.body.appendChild(elink);
        elink.click();
        document.body.removeChild(elink);
    }
}

上一篇下一篇

猜你喜欢

热点阅读