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 相关文章推荐
jquery.combobox中文api和例子,修复了上面的小bug
Mar 28 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
Apr 21 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
Aug 17 Javascript
JavaScript数组去重的五种方法
Nov 05 Javascript
JavaScript设计模式开发中组合模式的使用教程
May 18 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
Aug 02 Javascript
Bootstrap表格制作代码
Mar 17 Javascript
深入理解react-router@4.0 使用和源码解析
May 23 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
Dec 04 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
Feb 28 Javascript
解决Vue调用springboot接口403跨域问题
Sep 02 Javascript
Vue2.0 ES6语法降级ES5的操作
Oct 30 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与已存在的Java应用程序集成
2006/10/09 PHP
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
php cli换行示例
2014/04/22 PHP
php实现paypal 授权登录
2015/05/28 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
JS 时间显示效果代码
2009/08/23 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
Python Collatz序列实现过程解析
2019/10/12 Python
python的launcher用法知识点总结
2020/08/07 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
大学本科毕业生的自我鉴定
2013/11/26 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
企业安全生产责任书
2014/04/14 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书