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 相关文章推荐
jscript之Read an Excel Spreadsheet
Jun 13 Javascript
ToolTips JQEURY插件之简洁小提示框效果
Nov 19 Javascript
浅谈JS日期(Date)处理函数
Dec 07 Javascript
Node.js中的缓冲与流模块详细介绍
Feb 11 Javascript
Google 地图控件集详解及实例代码
Aug 06 Javascript
浅谈jQuery中的checkbox问题
Aug 10 Javascript
JS求解三元一次方程组值的方法
Jan 03 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
Jan 05 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
Sep 13 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
Jun 05 Javascript
js+html+css实现手动轮播和自动轮播
Dec 30 Javascript
js实现电灯开关效果
Jan 19 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
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
详解javascript函数的参数
2015/11/10 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
angularjs之$timeout指令详解
2017/06/13 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
tsconfig.json配置详解
2019/05/17 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
耐克亚太地区:Nike APAC
2019/12/07 全球购物
有模特经验的简历自我评价
2013/09/19 职场文书
军训学生自我鉴定
2014/02/12 职场文书
校庆口号
2014/06/20 职场文书
五一活动标语
2014/06/30 职场文书
党性教育心得体会
2014/09/03 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
小学感恩主题班会
2015/08/12 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS