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
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
Feb 16 Javascript
js实现透明度渐变效果的方法
Apr 10 Javascript
最常见的左侧分类菜单栏jQuery实现代码
Nov 28 Javascript
js实现随机点名小功能
Aug 17 Javascript
基于JavaScript 性能优化技巧心得(分享)
Dec 11 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
Jun 28 Javascript
vue定义全局变量和全局方法的方法示例
Aug 01 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
Jul 05 Javascript
vue新建项目并配置标准路由过程解析
Dec 09 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
Jan 20 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
Dec 07 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
Prototype 学习 Prototype对象
2009/07/12 Javascript
ASP Json Parser修正版
2009/12/06 Javascript
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
js表头排序实现方法
2015/01/16 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
javascript禁止超链接跳转的方法
2016/02/02 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
2016/08/31 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
师范院校学生自荐信范文
2013/12/27 职场文书
爸爸的花儿落了教学反思
2014/02/20 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
银行业务授权委托书
2014/10/10 职场文书
学生违反校规检讨书
2014/10/28 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
借钱欠条怎么写
2015/07/03 职场文书