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 getBoundingClientRect() 来获取页面元素的位置
Nov 25 Javascript
基于jQuery的message插件实现右下角弹出消息框
Jan 11 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
Jul 10 Javascript
js实现基于正则表达式的轻量提示插件
Aug 29 Javascript
js获取及判断键盘按键的方法
Dec 01 Javascript
第一次接触神奇的Bootstrap网格系统
Jul 27 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
Feb 08 Javascript
VUE axios上传图片到七牛的实例代码
Jul 28 Javascript
关于单文件组件.vue的使用
Sep 20 Javascript
Vue Cli3 创建项目的方法步骤
Oct 15 Javascript
Node.js控制台彩色输出的方法与原理实例详解
Dec 01 Javascript
JavaScript设计模式之原型模式详情
Jun 21 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数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
php根据生日计算年龄的方法
2015/07/13 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
BootStrap入门学习第一篇
2017/08/28 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
python中管道用法入门实例
2015/06/04 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
回门宴父母答谢词
2014/01/26 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
幼儿园庆六一活动方案
2014/03/06 职场文书
活动总结怎么写啊
2014/05/07 职场文书
大型活动组织方案
2014/05/10 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
应聘教师求职信范文
2015/03/20 职场文书
离婚民事起诉状
2015/08/03 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
python内置模块之上下文管理contextlib
2022/06/14 Python