js使用文件流下载csv文件的实现方法


Posted in Javascript onJuly 15, 2019

理解Blob对象

在Blob对象出现之前,在javascript中一直没有比较好的方式处理二进制文件,自从有了Blob了,我们就可以使用它操作二进制数据了。

现在我们开始来理解下Bolb对象及它的文件流下载应用场景,话不多说了,来一起看看详细的介绍吧

1. 创建Blob对象方式如下:

var blob = new Blob(dataArray, options);

dataArray: 它是一个数组,它包含了要添加到Blob对象中的数据。数组可以是二进制对象或者字符串。

options是可选的对象参数,用于设置数组中数据的MIME类型。

1. 创建一个DOMString对象的Blob对象。如下代码:

var str = "<div>Hello World</div>"; 
var blob = new Blob([str], {type: 'text/xml'}); 
console.log(blob); // 输出:Blob {size: 22, type: "text/xml"}

2. 理解URL.createObjectURL对象

window对象的URL对象是用来将blob或file读取成一个url的。

window.URL.createObjectURL(file / blob);

比如我现在结合上面的blob对象来生成一个url的简单demo实列如下所示:

var str = "<div>Hello World</div>"; 
var blob = new Blob([str], {type: '.csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel'});
console.log(blob); 

const url3 = window.URL.createObjectURL(blob);
console.log(url3);

如上代码第一个打印blob变量值如下:

Blob {size: 22, type: ".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"}

打印第二个url3变量值信息如下:

blob:null/2c75a56e-0104-4572-bc19-391d3bf93d9d

3. 理解HTML5中a标签的download属性

HTMl5中给a标签新增了一个download属性,只要我们设置该属性值,那么点击该链接时浏览器不会打开新链接,而是会直接下载文件,并且文件名就是 download 的属性值。

因此结合这个特点,我们就可以简单的实现文件流下载文件了,我们首先在原来的代码基础之上,再动态创建一个a链接,然后把该a标签的样式设置none, 该链接的 href属性 就是我们上面是有 window.URL.createObjectURL(blob); 生成的url,然后我们把 a链接的download属性设置下,该属性值就是我们的下载文件的文件名。最后触发点击功能即可下载了。如下代码:

var str = "<div>Hello World</div>"; 
var blob = new Blob([str], {type: '.csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel'});
console.log(blob);
const url3 = window.URL.createObjectURL(blob);
console.log(url3);

var filename = '文件流下载' + '.csv';
const link = document.createElement('a');
link.style.display = 'none';
link.href = url3;
link.setAttribute('download', filename);
document.body.appendChild(link);
link.click();

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Js中sort()方法的用法
Nov 04 Javascript
你所要知道JS(DHTML)中的一些技巧
Jan 09 Javascript
面向对象的Javascript之一(初识Javascript)
Jan 20 Javascript
jQuery模拟点击A标记示例参考
Apr 17 Javascript
JavaScript中的方法调用详细介绍
Dec 30 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
Nov 25 Javascript
Bootstrap table 定制提示语的加载过程
Feb 20 Javascript
ejsExcel模板在Vue.js项目中的实际运用
Jan 27 Javascript
Vue2 监听属性改变watch的实例代码
Aug 27 Javascript
vue-better-scroll 的使用实例代码详解
Dec 03 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
Aug 25 Javascript
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
Jul 15 #Javascript
微信小程序开发技巧汇总
Jul 15 #Javascript
微信小程序中如何计算距离某个节日还有多少天
Jul 15 #Javascript
微信小程序基础教程之worker线程的使用方法
Jul 15 #Javascript
使用vue-router在Vue页面之间传递数据的方法
Jul 15 #Javascript
微信小程序在其他页面监听globalData中值的变化
Jul 15 #Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
Jul 15 #Javascript
You might like
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
浅谈php自定义错误日志
2015/02/13 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
JS学习之表格的排序简单实例
2016/05/16 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
python多线程用法实例详解
2015/01/15 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
《美丽的丹顶鹤》教学反思
2014/04/22 职场文书
十八大演讲稿
2014/05/22 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
Python中OpenCV实现查找轮廓的实例
2021/06/08 Python
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android