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 相关文章推荐
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
Apr 27 Javascript
JavaScript 通过模式匹配实现重载
Aug 12 Javascript
JS.elementGetStyle(element, style)应用示例
Sep 24 Javascript
使用百度地图api实现根据地址查询经纬度
Dec 11 Javascript
浅谈javascript函数式编程
Sep 06 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
Jun 23 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
Aug 01 Javascript
window.open不被拦截的简单实现代码(推荐)
Aug 04 Javascript
Js apply方法详解
Feb 16 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
Aug 25 Javascript
JS代码实现电脑配置检测功能
Mar 21 Javascript
vue Element-ui表格实现树形结构表格
Jun 07 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下正则来匹配dede模板标签的代码
2010/08/21 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
点球小游戏python脚本
2018/05/22 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
船舶专业个人求职信范文
2014/01/02 职场文书
大学生求职信例文
2014/06/29 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
聚会通知怎么写
2015/04/23 职场文书
戒赌保证书
2015/05/11 职场文书
2019学校请假条格式及范文
2019/06/25 职场文书