1.当接口返回的数据为二进制流时:

方法一

exportHistory().then(res=>{
  //res.data为后端返回的二进制流
  let blob = new Blob([res.data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'})
  let url = window.URL.createObjectURL(blob)
  let a = document.createElement("a");
  document.body.appendChild(a);
  a.href = url;
  a.download = '文件名1'; //命名下载名称
  a.click(); //点击触发下载
  window.URL.revokeObjectURL(url);  //下载完成进行释放
})

方法二

export const downloadFileBlob = (path, name) => {
  const xhr = new XMLHttpRequest();
  xhr.open('get', path);
  xhr.responseType = 'blob';
  xhr.send();
  xhr.onload = function () {
    if (this.status === 200 || this.status === 304) {
      // 如果是IE10及以上,不支持download属性,采用msSaveOrOpenBlob方法,但是IE10以下也不支持msSaveOrOpenBlob
      if ('msSaveOrOpenBlob' in navigator) {
        navigator.msSaveOrOpenBlob(this.response, name);
        return;
      }
      const url = URL.createObjectURL(this.response);
      const a = document.createElement('a');
      a.style.display = 'none';
      a.href = url;
      a.download = name;
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      URL.revokeObjectURL(url);
    }
  };
};

使用
import { downloadFileBlob } from '@/utils/download.js'
downloadFileBlob(res, '文件111')

2.当接口返回的数据为下载或导出地址时:

window.location.href=data;  //data为后端返回的下载地址
});

瑞瑞_
73 声望8 粉丝