Vue.js下载二进制流文件并转为Excel文件

流程原理:

1、获取后端传递来的二进制数据流
2、传递到封装的函数当中,需要传递二进制数据和文件名(不传有默认文件名)
3、将二进制数据流包裹成一个new Blob对象
4、将Blob对象转化为一个URL资源地址,这个地址时一个本地地址
5、创建一个a标签,设置隐藏,添加下载属性,添加到body当中,启动下载
6、下载完毕之后,删除a标签

以下为下载Excel文件的核心逻辑,传入二进制流data和文件名fileName即可

let blob = new Blob([data], {
  type: 'application/octet-stream'
}); // 转化为blob对象
let filename = fileName || 'filename.xls'; // 判断是否使用默认文件名
if (typeof window.navigator.msSaveBlob !== 'undefined') {
  window.navigator.msSaveBlob(blob, filename);
} else {
  var blobURL = window.URL.createObjectURL(blob); // 将blob对象转为一个URL
  var tempLink = document.createElement('a'); // 创建一个a标签
  tempLink.style.display = 'none';
  tempLink.href = blobURL;
  tempLink.setAttribute('download', filename); // 给a标签添加下载属性
  if (typeof tempLink.download === 'undefined') {
    tempLink.setAttribute('target', '_blank');
  }
  document.body.appendChild(tempLink); // 将a标签添加到body当中
  tempLink.click(); // 启动下载
  document.body.removeChild(tempLink); // 下载完毕删除a标签
  window.URL.revokeObjectURL(blobURL);
}

注意事项:在vue框架当中,数据请求是借助axios的,为此,在发送请求时,需要修改responseType,改为arraybuffer,axios默认情况下responseType为json,若是不修改,很可能下载时候会是乱码,或者为null。

上一篇 vue-cli项目配置lib-flexible【阿里手淘移动端自适应解决方案】
下一篇 Vue项目中使用qrcode生成二维码
目录
文章列表
1 CentOS下部署Kafka
CentOS下部署Kafka
2
HTML5移动页面自适应手机屏幕方法
HTML5移动页面自适应手机屏幕方法
3
CSharp 多线程通信
CSharp 多线程通信
4
获取select被选中option的value和text
获取select被选中option的value和text
5
Android Mail开发库
Android Mail开发库
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。