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 相关文章推荐
htm调用JS代码
Mar 15 Javascript
javascript 客户端验证上传图片的大小(兼容IE和火狐)
Aug 15 Javascript
event.currentTarget与event.target的区别介绍
Dec 31 Javascript
jquery中的on方法使用介绍
Dec 29 Javascript
关于img的href和src取变量及赋值的方法
Apr 28 Javascript
js获取日期:昨天今天和明天、后天
Jun 11 Javascript
JavaScript 获取任一float型小数点后两位的小数
Jun 30 Javascript
javascript实现简单的html5视频播放器
May 06 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
Dec 08 Javascript
js实现数字递增特效【仿支付宝我的财富】
May 05 Javascript
Js中使用正则表达式验证输入是否有特殊字符
Sep 07 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
Jan 16 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
openflashchart 2.0 简单案例php版
2012/05/21 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
PHP学习笔记之session
2018/05/06 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
javascript实现动态增加删除表格行(兼容IE/FF)
2007/04/02 Javascript
Jquery cookie操作代码
2010/03/14 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
学院领导推荐信
2013/10/30 职场文书
会计专业个人求职信范文
2014/01/08 职场文书
区三好学生主要事迹
2014/01/30 职场文书
保密承诺书
2014/03/27 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server