js 处理下载文件流

//导出公用方法
import axios from '../util/axios';

/*
** 参数说明:
**1.url:接口地址
**2.params:接口请求参数{}
**3.fileName:设置下载文件名称
**4.callback:回调函数,对请求结果进行回调
*/
export const exportData = (url, params, fileName) => {
  return axios.post(url, params, {
    responseType: 'blob'
  }).then(res => {
    var blob = new Blob([res.data], {
      type: 'application/vnd.ms-excel;charset=utf-8'
    });
    var d = new Date();
    const date = d.getFullYear() + '' + (d.getMonth() + 1) + '' + d.getDate() + '' + d.getHours() + '' + d.getMinutes() + '' + d.getSeconds();
    // 针对于IE浏览器的处理, 因部分IE浏览器不支持createObjectURL
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
      window.navigator.msSaveOrOpenBlob(blob, fileName + date);
    } else {
      var downloadElement = document.createElement('a');
      var href = window.URL.createObjectURL(blob); // 创建下载的链接
      downloadElement.href = href;
      downloadElement.download = fileName + date; // 下载后文件名
      document.body.appendChild(downloadElement);
      downloadElement.click(); // 点击下载
      document.body.removeChild(downloadElement); // 下载完成移除元素
      window.URL.revokeObjectURL(href); // 释放掉blob对象
    }
  });
};

export const downLoadFile = (url, params, filename) => {
  return axios.post(url, params, {
    responseType: 'arraybuffer'
  }).then(res => {
    console.log(res)
    var blob = new Blob([res.data], {
      type: '*'
    });
    // 针对于IE浏览器的处理, 因部分IE浏览器不支持createObjectURL
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
      window.navigator.msSaveOrOpenBlob(blob, fileName);
    } else {
      var downloadElement = document.createElement('a');
      var href = window.URL.createObjectURL(blob); // 创建下载的链接
      downloadElement.href = href;
      downloadElement.download = filename; // 下载后文件名
      document.body.appendChild(downloadElement);
      downloadElement.click(); // 点击下载
      document.body.removeChild(downloadElement); // 下载完成移除元素
      window.URL.revokeObjectURL(href); // 释放掉blob对象
    }
  });
};
export const previewFile = (url, params, filename, callback) => {
  return axios.post(url, params, {
    responseType: 'arraybuffer'
  }).then(res => {
    console.log(res)
    var blob = new Blob([res.data], {
      type: '*'
    });
    // 针对于IE浏览器的处理, 因部分IE浏览器不支持createObjectURL
    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
      window.navigator.msSaveOrOpenBlob(blob, fileName);
    } else {
      // var downloadElement = document.createElement('a');
      var href = window.URL.createObjectURL(blob); // 创建下载的链接
      var pdfUrl = '../../static/pdf/web/viewer.html?file=' + encodeURIComponent(href)
      // callback(filename.includes("jpg") || filename.includes("png") ? href : pdfUrl)
      if (filename.includes("jpg") || filename.includes("png")) {
        callback(href, "img")
      }
      else if (filename.includes("txt")) {
        callback(href, "txt")
      }
      else {
        callback(pdfUrl,"pdf")
      }

      // downloadElement.href = pdfUrl;
      // // downloadElement.download = filename; // 下载后文件名
      // document.body.appendChild(downloadElement);
      // downloadElement.click(); // 点击下载
      // document.body.removeChild(downloadElement); // 下载完成移除元素
      // window.URL.revokeObjectURL(href); // 释放掉blob对象
    }
  });
};

猜你喜欢

转载自blog.csdn.net/qq_45404003/article/details/126747165