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 判断用户输入的邮箱及手机格式是否正确
Dec 08 Javascript
js window.onload 加载多个函数和追加函数详解
Jan 08 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
Sep 19 Javascript
JavaScript实现自动切换图片代码
Oct 11 Javascript
基于js中的原型(全面讲解)
Sep 19 Javascript
JS非行间样式获取函数的实例代码
Jun 05 Javascript
jQuery插件实现的日历功能示例【附源码下载】
Sep 07 jQuery
js数组去重的方法总结
Jan 18 Javascript
vue集成kindeditor富文本的实现示例代码
Jun 07 Javascript
jQuery子选择器与可见性选择器实例分析
Jun 28 jQuery
VUE兄弟组件传值操作实例分析
Oct 26 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
Dec 09 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
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
利用curl抓取远程页面内容的示例代码
2013/07/23 PHP
php批量更改数据库表前缀实现方法
2013/10/26 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
python简单获取数组元素个数的方法
2015/07/13 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python实现k-means算法
2018/02/23 Python
python去除文件中重复的行实例
2018/06/29 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
python获取栅格点和面值的实现
2020/03/10 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
remote接口和home接口主要作用
2013/05/15 面试题
求职信的要素有哪些呢
2013/12/26 职场文书
《雨霖铃》听课反思
2014/02/13 职场文书
临床护理求职信
2014/04/26 职场文书
大学社团计划书
2014/05/01 职场文书
法制宣传标语集锦
2014/06/25 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
行为规范主题班会
2015/08/13 职场文书
Pandas-DataFrame知识点汇总
2022/03/16 Python
MySQL常用慢查询分析工具详解
2022/08/14 MySQL