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 相关文章推荐
javascript 的Document属性和方法集合
Jan 25 Javascript
JavaScript之IE的fireEvent方法详细解析
Nov 20 Javascript
Javascript动态创建表格及删除行列的方法
May 15 Javascript
ajax如何实现页面局部跳转与结果返回
Aug 24 Javascript
prototype.js常用函数详解
Jun 18 Javascript
AngularJS 避繁就简的路由
Jul 01 Javascript
性能优化之代码优化页面加载速度
Mar 01 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
Mar 02 Javascript
Vue自定义图片懒加载指令v-lazyload详解
Dec 31 Javascript
微信小程序倒计时功能实例代码
Jul 17 Javascript
js布局实现单选按钮控件
Jan 17 Javascript
Vue 打包后相对路径的引用问题
Jun 05 Vue.js
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中使用Oracle数据库(3)
2006/10/09 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
php中关于换行的实例写法
2019/09/26 PHP
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
JavaScript日历实现代码
2010/09/12 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
jquery实现图片轮播器
2017/05/23 jQuery
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
Angular实现响应式表单
2017/08/04 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
js实现限定范围拖拽的示例
2020/10/26 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
python单链表实现代码实例
2013/11/21 Python
编写简单的Python程序来判断文本的语种
2015/04/07 Python
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
Python shutil模块用法实例分析
2019/10/02 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
python中栈的原理及实现方法示例
2019/11/27 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
房地产销售经理岗位职责
2014/01/01 职场文书
高中军训感言1000字
2014/03/01 职场文书
企业诚信承诺书
2014/05/23 职场文书
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技