Vue通过Blob对象实现导出Excel功能示例代码


Posted in Javascript onJuly 31, 2020

不同的项目有不同的导出需求,有些只导出当前所显示结果页面的表格进入excel,这个时候就有很多插件,比如vue-json-excel或者是Blob.js+Export2Excel.js来实现导出Excel功能。但是有些需求因为数据量太大,成千上万条数据,所以是需要后端拼接,然后输出二进制流文件,然后前端直接下载,这次我们谈谈后者的做法。

Blob对象表示一个不可变、原始数据的类文件对象,通常我也叫它二进制流对象。我们可以通过Blob对象实现导出Excel功能,先放上代码:

<el-button @click="exportExcel()">导出</el-button>

<script>
methods: {
 exportExcel(){
  var params={
  XX:xx//额外需要携带的请求体
  }
  this.$axios.get('/XX/XX',{
  params: params,
  responseType: 'blob' //首先设置responseType字段格式为 blob
  }).then(res => {
  console.log(res);
  let blob = new Blob([res], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"}); // 为blob设置文件类型,这里以.xlsx为例
  let url = window.URL.createObjectURL(blob); // 创建一个临时的url指向blob对象
  let a = document.createElement("a");
  a.href = url;
  a.click();
  // 释放这个临时的对象url
  window.URL.revokeObjectURL(url); 
  });
 },
 }
</script>

'responseType'表示的是服务器响应的数据类型,可以是'arrayBuffer'、'blob'、'document'、'json'、'txt'、'stream',默认为json。axios官方文档地址:https://www.kancloud.cn/yunye/axios/234845(axios请求配置章节)。

所以我们接收后台传给前端的二进制流之前需要先设置responseType为blob,否则默认会以json获取,下载下来的文件打开会提示文件已损坏。控制台输出的可以看到是个正确的Blob对象,这就说明我们的配置是对的,如图1所示。

Vue通过Blob对象实现导出Excel功能示例代码

图1 控制台输出的Blob对象

后端最好也要配置response头的content-type为对应的类型,所图2所示。

Vue通过Blob对象实现导出Excel功能示例代码

图2 后端设置了响应头相对应的content-type

然后,需要给这个Blob对象设置一个type,这个type表明改Blob对象所包含数据的MIME类型。如果类型未知,则该值为空字符串。这里给出几个常用文件格式的MIME类型:(详细的可参考WebAPI官方文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types)

扩展名----------MIME类型

.csv--------------text/csv

.jpeg/.jpg-------image/jpeg

.png-------------image/png

.rar--------------application/x-rar-compressed

.doc-------------application/msword

.docx-----------application/vnd.openxmlformats-officedocument.wordprocessingml.document

.xls--------------application/vnd.ms-excel

.xlsx------------application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

.zip--------------application/zip

在正常的导出请求之后可以看到又发了一个新的blob请求,其本质是到这个地址下载文件,如图3所示:

Vue通过Blob对象实现导出Excel功能示例代码

图3 创建一个临时的url指向blob对象

一般来说,这样就可以实现下载的功能了。

这里提点题外话,谷歌浏览器下载设置默认为浏览器下载默认路径,也就不会弹出文件框,谷歌浏览器下载文件框如图4所示,也就没有了所谓的自定义保存路径和自定义文件名,如图5所示,在浏览器底部会有下载提示。

Vue通过Blob对象实现导出Excel功能示例代码

图4谷歌浏览器下载文件框

Vue通过Blob对象实现导出Excel功能示例代码

图5 谷歌浏览器下载会在屏幕底部显示

如果想要有下载文件框,请在设置->高级->下载内容->下载前询问每个文件的保存位置中设置为启用。

总结

到此这篇关于Vue通过Blob对象实现导出Excel功能的文章就介绍到这了,更多相关vue 通过blob对象导出excel内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
使用TextRange获取输入框中光标的位置的代码
Mar 08 Javascript
自己的js工具_Form 封装
Aug 21 Javascript
jquery easyui的tabs使用时的问题
Mar 23 Javascript
Html中JS脚本执行顺序简单举例说明
Jun 19 Javascript
js调用iframe实现打印页面内容的方法
Mar 04 Javascript
轻松实现js弹框显示选项
Sep 13 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
Mar 01 Javascript
微信小程序图片宽100%显示并且不变形
Jun 21 Javascript
Node.js 基础教程之全局对象
Aug 06 Javascript
关于webpack2和模块打包的新手指南(小结)
Aug 07 Javascript
详解如何在nuxt中添加proxyTable代理
Aug 10 Javascript
JavaScript实现文件下载并重命名代码实例
Dec 12 Javascript
Vue.js中使用Vuex实现组件数据共享案例
Jul 31 #Javascript
原生JS实现记忆翻牌游戏
Jul 31 #Javascript
js实现跳一跳小游戏
Jul 31 #Javascript
js实现翻牌小游戏
Jul 31 #Javascript
Vue 请求传公共参数的操作
Jul 31 #Javascript
vue2.0 解决抽取公用js的问题
Jul 31 #Javascript
vue实现公共方法抽离
Jul 31 #Javascript
You might like
php使用cookie保存登录用户名的方法
2015/01/26 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
python中将字典转换成其json字符串
2014/07/16 Python
Python创建文件和追加文件内容实例
2014/10/21 Python
python 开发的三种运行模式详细介绍
2017/01/18 Python
分享vim python缩进等一些配置
2018/07/02 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
Python3列表List入门知识附实例
2020/02/09 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
美国手机支架公司:PopSockets
2019/11/27 全球购物
最新茶叶店创业计划书
2014/01/14 职场文书
施工安全汇报材料
2014/08/17 职场文书
给医院的感谢信
2015/01/21 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
Pandas数据类型之category的用法
2021/06/28 Python
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers