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 相关文章推荐
Javascript的IE和Firefox兼容性汇编
Jul 01 Javascript
JavaScript Event学习第三章 早期的事件处理程序
Feb 07 Javascript
js控制input输入字符解析
Dec 27 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
May 23 Javascript
jQuery移除元素自动解绑事件实现思路及代码
May 31 Javascript
JavaScript动态创建form表单并提交的实现方法
Dec 10 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
Jun 24 Javascript
浅谈jQuery中事情的动态绑定
Feb 12 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
Feb 14 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
Jun 18 Javascript
Layui数据表格跳转到指定页的实现方法
Sep 05 Javascript
详解vue修改elementUI的分页组件视图没更新问题
Nov 13 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
ThinkPHP分页类使用详解
2014/03/05 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
理解javascript异步编程
2016/01/27 Javascript
JSONP基础知识详解
2017/03/19 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python Socket传输文件示例
2017/01/16 Python
python requests 使用快速入门
2017/08/31 Python
Django model select的多种用法详解
2019/07/16 Python
django 环境变量配置过程详解
2019/08/06 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
安全生产承诺书
2014/03/26 职场文书
目标责任书范本
2014/04/16 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
歌剧魅影观后感
2015/06/05 职场文书
风之谷观后感
2015/06/11 职场文书
家电创业计划书
2019/08/05 职场文书
如何用JS实现简单的数据监听
2021/05/06 Javascript
解析MySQL索引的作用
2022/03/03 MySQL