1. 理解Blob对象javascript
在Blob对象出现以前,在javascript中一直没有比较好的方式处理二进制文件,自从有了Blob了,咱们就能够使用它操做二进制数据了。如今咱们开始来理解下Bolb对象及它的文件流下载应用场景。html
1. 建立Blob对象方式以下:java
var blob = new Blob(dataArray, options);
dataArray: 它是一个数组,它包含了要添加到Blob对象中的数据。数组能够是二进制对象或者字符串。数组
options是可选的对象参数,用于设置数组中数据的MIME类型。浏览器
1. 建立一个DOMString对象的Blob对象。以下代码:app
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对象url
window对象的URL对象是用来将blob或file读取成一个url的。spa
window.URL.createObjectURL(file / blob);3d
好比我如今结合上面的blob对象来生成一个url的简单demo实列以下所示:excel
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();
原文出处:https://www.cnblogs.com/tugenhua0707/p/11188117.html