Blob
2、Blob
Blob(Binary Large Object)对象代表了一段二进制数据,提供了一系列操作接口。比如通过new Blob()创建的对象就是Blob对象.又比如,在XMLHttpRequest里,如果指定responseType为blob,那么得到的返回值也是一个blob对象.
2.1 生成Blob对象
生成Blob对象有两种方法:一种是使用Blob构造函数,另一种是对已有的Blob对象使用slice()方法切出一段。
(1)Blob构造函数
var blob = new Blob(data, type)
Blob构造函数接受两个参数:
参数data是一组数据,所以必须是数组,即使只有一个字符串也必须用数组装起来.
参数type是对这一Blob对象的配置属性,目前也只有一个type也就是相关的MIME需要设置 type的值:
"text/csv,charset=UTF-8" 设置为csv格式,并设置编码为UTF-8
"text/html" 设置成html格式
注意:任何浏览器支持的类型都可以这么用
var blob = new Blob(["我是Blob"],{type: "text/html"});
2.2 属性
blob.size //Blob大小(以字节为单位)
blob.type //Blob的MIME类型,如果是未知,则是“ ”(空字符串)
2.3 slice()
slice()返回一个新的Blob对象,包含了源Blob对象中指定范围内的数据。
blob.slice(
optional long long start,
optional long long end,
optional DOMString contentType };
参数说明:
start 可选,开始索引,可以为负数,语法类似于数组的slice方法.默认值为0.
end 可选,结束索引,可以为负数,语法类似于数组的slice方法.默认值为最后一个索引.
contentType可选 ,新的Blob对象的MIME类型,这个值将会成为新的Blob对象的type属性的值,默认为一个空字符串.
2.4 Blob的使用
使用Blob最简单的方法就是创建一个URL来指向Blob:
<a download="data.txt" id="getData">下载</a>
var data= "Hello world!";
var blob = new Blob([data], {
type: "text/html,charset=UTF-8"
});
window.URL = window.URL || window.webkitURL;
document.querySelector("#getData").href = URL.createObjectURL(blob);
上面的代码将Blob URL赋值给a,点击后提示下载文本文件data.txt,文件内容为“Hello World”。
2.5 URL.createObjectURL()
objectURL = URL.createObjectURL(blob);
使用URL.createObjectURL()函数可以创建一个Blob URL,参数blob是用来创建URL的File对象或者Blob对象,返回值格式是:blob://URL。
注意:在每次调用 createObjectURL() 方法时,都会创建一个新的 URL 对象,即使你已经用相同的对象作为参数创建过。当不再需要这些 URL 对象时,每个对象必须通过调用 URL.revokeObjectURL() 方法传入创建的URL为参数,用来释放它。浏览器会在文档退出的时候自动释放它们,但是为了获得最佳性能和内存使用状况,你应该在安全的时机主动释放掉它们。
2.6 乱码问题
当数据中包含汉字时,导出的文件可能会出现乱码,不过我们可以这样解决:
var data = "ufeff" + "汉字";