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 字符 Escape,encodeURI,encodeURIComponent
Jul 09 Javascript
模拟select的代码
Oct 19 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
Nov 11 Javascript
jquery validate 自定义验证方法介绍 日期验证
Feb 27 Javascript
jQuery插件StickUp实现网页导航置顶
Apr 12 Javascript
原生javascript实现解析XML文档与字符串
Mar 01 Javascript
关于cookie的初识和运用(js和jq)
Apr 07 Javascript
Angular中$state.go页面跳转并传递参数的方法
May 09 Javascript
在一般处理程序(ashx)中弹出js提示语
Aug 16 Javascript
vue组件生命周期详解
Nov 07 Javascript
Vue中点击active并第一个默认选中功能的实现
Feb 24 Javascript
JavaScript实现贪吃蛇游戏
Jun 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
PHP开发注意事项总结
2015/02/04 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
js Math 对象的方法
2013/09/01 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
BootStrap selectpicker
2016/06/20 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
require.js中的define函数详解
2017/07/10 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
python计算最小优先级队列代码分享
2013/12/18 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
python 字典的打印实现
2019/09/26 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
python基于TCP实现的文件下载器功能案例
2019/12/10 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
HTML5学习笔记之History API
2015/02/26 HTML / CSS
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
信息专业大学生自我评价分享
2014/01/17 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
政风行风建设整改方案
2014/10/27 职场文书
仓管员岗位职责
2015/02/03 职场文书
教师个人教学总结
2015/02/11 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python
Python内置数据结构列表与元组示例详解
2021/08/04 Python
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL