vue前端导出/下载表格使用Blob处理后台返回的二进制流数据

功能:接口返回文件流,前端实现文件下载/导出功能

一般有2种方法:

  1. 后台返回一个下载地址url。这种方式是后台得先生成文件保存在服务器某个地方,然后返回给前端url地址,前端直接拿到url地址一行代码去下载文件即可。这种有个问题就是后台得知道什么时候可以删除生成的那个文件。(不推荐使用) 
  2. 后台返回给前端的是一个二进制流,这种方式好处在于后台不用生成文件去保存,二进制流保存在内存中,不用占用服务器存储空间,不用考虑什么时候删除去文件。(推荐使用) 

 方法:主要讲第二种方法


/**
 * 通过a标签导出一个文件流
 * @param {文件流} res
 * @param {文件名} name
 */
export const exportFile = (res, fileName) => {
  const blob = new Blob([res], {
    type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  });
  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);
    elink.click();
    URL.revokeObjectURL(elink.href); // 释放URL 对象
    document.body.removeChild(elink);
  } else {
    // IE10+下载
    navigator.msSaveBlob(blob, fileName);
  }
};

 使用:

   exportProjectList() {
      getFileDate().then((res) => {
        if (res) {
          exportFile(res, '这是下载的文件名~');
        }
      });
    },

注意:

getFileDate接口请求的方式需为post 且  responseType为 'blob'

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值