1 |
<video src="blob:http://www.bilibili.com/d0823f0f-2b2a-4fd6-a93a-e4c82173c107"></video> |
Blob 对象表示一个不可变、原始数据的类文件对象。Blob 表示的不必定是JavaScript原生格式的数据。 文件(即File)接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。html
要从其余非blob对象和数据构造一个Blob,请使用 Blob() 构造函数。要建立包含另外一个blob数据的子集blob,请使用 slice()方法。要获取用户文件系统上的文件对应的Blob对象,json
File 对象是特殊类型的 Blob,且能够用在任意的 Blob 类型的 context 中。好比说, FileReader, URL.createObjectURL(), createImageBitmap(), 及 XMLHttpRequest.send() 都能处理 Blob 和 File。数组
官方:接受Blob对象的API也被列在 File 文档中(下边有file相关内容的部分,继续浏览)。app
MDN-Blob异步
Blob属性:ide
Blob.size 只读 Blob 对象中所包含数据的大小(单位为字节)。 Blob.type 只读 一个字符串,代表该Blob对象所包含数据的MIME类型。若是类型没法肯定,则返回空字符串。 语法:`var mimetype = instanceOfFile.type`
b.如何建立Blob函数
BlobBuilder 接口提供了另一种建立Blob对象的方式:使用旧方法建立 Blob 对象。连接地址
解释:使用 BlobBuilder 来建立一个Blob 实例,而且使用一个 append() 方法,将字符串(或者 ArrayBuffer 或者 Blob,此处用 string 举例)插入,一旦数据插入成功,就能够使用 getBlob() 方法设置一个 mime 。但该方式如今已经废弃,不该继续使用:ui
1
2
3
4var builder = new BlobBuilder();
var fileParts = ['<a id="a"><b id="b">hey!</b></a>'];
builder.append(fileParts[0]);
var myBlob = builder.getBlob('text/xml');
Blob构造函数编码
Blob() 构造函数返回一个新的 Blob 对象。 blob的内容由参数数组中给出的值的串联组成。url
Blob() 构造函数 容许用其它对象建立 Blob 对象。好比,用字符串构建一个 blob:
语法: var aBlob = new Blob( array, options );
参数:
array 是一个由ArrayBuffer, ArrayBufferView(TypedArray类型化数组的构造函数), Blob, DOMString 等对象构成的 Array,或者其余相似对象的混合体,它将会被放进Blob。DOMStrings会被编码为UTF-8。
ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。ArrayBuffer 不能直接操做,而是要经过类型数组对象或 DataView 对象来操做,它们会将缓冲区中的数据表示为特定的格式,并经过这些格式来读写缓冲区的内容。
ArrayBuffer 构造函数用来建立一个指定字节长度的 ArrayBuffer 对象。
以现有数据获取 ArrayBuffer
1 |
function b64EncodeUnicode(str) { |
FileReader 对象容许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。
其中File对象能够是来自用户在一个 <input>
元素上选择文件后返回的FileList对象,也能够来自拖放操做生成的 DataTransfer对象,还能够是来自在一个HTMLCanvasElement上执行mozGetAsFile()方法后返回结果。
options 是一个可选的BlobPropertyBag字典,它可能会指定以下两个属性:
type,默认值为 "",它表明了将会被放入到blob中的数组内容的MIME类型。 endings,默认值为"transparent",用于指定包含行结束符\n的字符串如何被写入。 它是如下两个值中的一个: "native",表明行结束符会被更改成适合宿主操做系统文件系统的换行符,或者 "transparent",表明会保持blob中保存的结束符不变
1 |
var aFileParts = ['<a id="a"><b id="b">hey!</b></a>']; // 一个包含DOMString的数组 |
一般状况下, File 对象是来自用户在一个 <input>
元素上选择文件后返回的 FileList 对象,也能够是来自由拖放操做生成的 DataTransfer 对象,或者来自 HTMLCanvasElement 上的 mozGetAsFile() API。
File 对象是特殊类型的 Blob,且能够用在任意的 Blob 类型的 context 中。好比说, FileReader, URL.createObjectURL(), createImageBitmap(), 及 XMLHttpRequest.send() 都能处理 Blob 和 File。
1 |
var blob = new Blob([typedArray], {type: "application/octet-binary"});// 传入一个合适的MIME类型 |
从 Blob 中提取数据
从Blob中读取内容的惟一方法是使用 FileReader。如下代码将 Blob 的内容做为类型数组读取:
1 |
var reader = new FileReader(); |
简单说下 FileReader:
属性:
常量名 | 值 | 描述 |
---|---|---|
EMPTY | 0 | 尚未加载任何数据 |
LOADING | 1 | 数据正在被加载 |
DONE | 2 | 已完成所有的读取请求 |
FileReader.result 只读
文件的内容。该属性仅在读取操做完成后才有效,数据的格式取决于使用哪一个方法来启动读取操做。
方法:
FileReader.abort()
停止读取操做。在返回时,readyState属性为DONE。
FileReader.readAsArrayBuffer()
开始读取指定的 Blob中的内容, 一旦完成, result 属性中保存的将是被读取文件的 ArrayBuffer 数据对象.
FileReader.readAsBinaryString()
开始读取指定的Blob中的内容。一旦完成,result属性中将包含所读取文件的原始二进制数据。
FileReader.readAsDataURL()
开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容。
FileReader.readAsText()
开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个字符串以表示所读取的文件内容。
参考文献: