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 相关文章推荐
用Div仿showModalDialog模式菜单的效果的代码
Mar 05 Javascript
密码框显示提示文字jquery示例
Aug 29 Javascript
JQuery插件开发示例代码
Nov 06 Javascript
JavaScript异步编程Promise模式的6个特性
Apr 03 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
Aug 04 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
Dec 20 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
Apr 27 Javascript
JS留言功能的简单实现案例(推荐)
Jun 23 Javascript
深入浅析JS中的严格模式
Jun 04 Javascript
vue使用中的内存泄漏【推荐】
Jul 10 Javascript
浅谈angularJS2中的界面跳转方法
Aug 31 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
Jul 20 Javascript
基于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
php Smarty 字符比较代码
2011/02/27 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
jQuery实现图片信息的浮动显示实例代码
2013/08/28 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
手写Vue弹窗Modal的实现代码
2019/09/11 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
python插入数据到列表的方法
2015/04/30 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
Python docx库用法示例分析
2019/02/16 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
环境科学专业个人求职信
2013/09/26 职场文书
计算机专业自我鉴定
2013/10/15 职场文书
大学生职业规划书的范本
2014/02/18 职场文书
化学工程专业求职信
2014/08/10 职场文书
车间主任岗位职责
2015/02/03 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python