js 文件流、网络路径导出文件功能

92 阅读1分钟
import { ElMessage } from 'element-plus'
function 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();
}
function saveAs(blob, filename) {
  if (window.navigator.msSaveOrOpenBlob) {
    navigator.msSaveBlob(blob, filename);
  } else {
    var link = document.createElement("a");
    var body = document.querySelector("body");
    link.href = window.URL.createObjectURL(blob);
    link.download = filename;
    link.style.display = "none";
    body.appendChild(link);
    link.click();
    body.removeChild(link);
    window.URL.revokeObjectURL(link.href);
  }
}
function download(url, filename) {
  getBlob(url, function (blob) {
    saveAs(blob, filename);
  });
}
// file [文件流]
// filename [导出文件名]
function DownexportFiles(file, filename, type) {
  const blob = new Blob([file], { type: 'application/zip' });
  let fileName = type ? `${filename}.${type}` : `${filename}`
  
  if ('download' in document.createElement('a')) { // 非IE下载
    const elink = document.createElement('a');
    elink.download = fileName;
    elink.style.display = 'none';
    elink.href = URL.createObjectURL(blob);
    document.body.appendChild(elink);
    ElMessage.success('下载成功')
      // Loading should be closed asynchronously
    elink.click();
    URL.revokeObjectURL(elink.href);// 释放URL 对象
    document.body.removeChild(elink);
  } else { // IE10+下载
    navigator.msSaveBlob(blob, fileName);
  }
}
export { download, DownexportFiles };

使用

import { DownexportFiles,download } from "@/utils/download";
DownexportFiles(res.data, "全院协议", "xlsx");
download(i.url, i.filename);