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 模态对话框和非模态对话框操作技巧汇总
Apr 15 Javascript
判断及设置浏览器全屏模式
Apr 20 Javascript
EasyUI中combobox默认值注意事项
Mar 01 Javascript
JavaScript返回0-1之间随机数的方法
Apr 06 Javascript
js+html5实现canvas绘制圆形图案的方法
Jun 05 Javascript
Jquery 垂直多级手风琴菜单附源码下载
Nov 17 Javascript
微信小程序中多个页面传参通信的学习与实践
May 05 Javascript
关于vue-router的beforeEach无限循环的问题解决
Sep 09 Javascript
十个免费的web前端开发工具详细整理
Sep 18 Javascript
webpack-dev-server远程访问配置方法
Feb 22 Javascript
基于Vue的延迟加载插件vue-view-lazy
May 21 Javascript
js取小数点后两位四种方法
Jan 18 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
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
php类中private属性继承问题分析
2012/11/01 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
js日期时间补零的小例子
2013/03/05 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
常见的jQuery选择器汇总
2014/11/24 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
vue接口请求加密实例
2020/08/11 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
Hadoop中的Python框架的使用指南
2015/04/22 Python
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
Django实现快速分页的方法实例
2017/10/22 Python
对pandas中to_dict的用法详解
2018/06/05 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
ipad上运行python的方法步骤
2019/10/12 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
一些Solaris面试题
2013/03/22 面试题
广州某公司软件工程师面试题
2014/12/22 面试题
《我的伯父鲁迅先生》教学反思
2014/02/12 职场文书
爱情寄语大全
2014/04/09 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
世界遗产导游词
2015/02/13 职场文书
质量保证书怎么写
2015/02/27 职场文书
岁月神偷观后感
2015/06/11 职场文书