Blob
对象表示一个不可变、原始数据的类文件对象。Blob 表示的不一定是JavaScript原生格式的数据。File
接口基于Blob
,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。
要从其他非blob对象和数据构造一个 Blob
,请使用 Blob()
构造函数。要创建一个 blob 数据的子集 blob,请使用 slice()
方法。要获取用户文件系统上的文件对应的 Blob
对象,请参阅 File
文档。
接受 Blob
对象的API也被列在 File
文档中。
1.构造函数
1.Blob(blobParts[, options])
返回一个新创建的 Blob
对象,其内容由参数中给定的数组串联组成。
2.属性
1.Blob.size
只读 Blob
对象中所包含数据的大小(字节)。
var sizeInBytes = blob.size
该Blob
接口的size
属性返回的大小Blob
或File
以字节为单位。
2.Blob.type
只读 一个字符串,表明该 Blob
对象所包含数据的 MIME 类型。如果类型未知,则该值为空字符串。
var mimetype = blob.type
返回:一个DOMString
包含文件的MIME类型,或者如果类型无法确定一个空字符串。
3.方法
1.Blob.slice([start[, end[, contentType]]])
返回一个新的 Blob
对象,包含了源 Blob
对象中指定范围内的数据。
Blob.slice()
方法用于创建一个包含源 Blob
的指定字节范围内的数据的新 Blob
对象。
var blob = instanceOfBlob.slice([start [, end [, contentType]]]};
start
可选
这个参数代表 Blob
里的下标,表示第一个会被会被拷贝进新的 Blob
的字节的起始位置。如果你传入的是一个负数,那么这个偏移量将会从数据的末尾从后到前开始计算。举例来说, -10 将会是 Blob
的倒数第十个字节。它的默认值是0, 如果你传入的start的长度大于源 Blob
的长度,那么返回的将会是一个长度为0并且不包含任何数据的一个 Blob
对象。
end
可选
这个参数代表的是 Blob
的一个下标,这个下标-1的对应的字节将会是被拷贝进新的Blob
的最后一个字节。如果你传入了一个负数,那么这个偏移量将会从数据的末尾从后到前开始计算。举例来说, -10 将会是 Blob
的倒数第十个字节。它的默认值就是它的原始长度(size
).
contentType
可选
给新的 Blob
赋予一个新的文档类型。这将会把它的 type 属性设为被传入的值。它的默认值是一个空的字符串。
2.Blob.stream()
返回一个能读取blob内容的 ReadableStream
。
Blob
接口的stream()
方法返回一个ReadableStream
对象,读取它将返回包含在Blob
中的数据。
var stream = blob.stream();
使用说明
使用 stream()
函数与其返回的ReadableStream
对象,你将得到一些有趣的能力:
- 调用方法
getReader()
,在返回的stream上获取一个对象,通过ReadableStreamDefaultReader
接口提供的read()
方法读取blob对象的方法。 - 调用返回stream对象的
pipeTo()
方法将blob对象的数据传输到可写流。 - 调用返回stream对象的
tee()
方法以准备可读流。该方法会返回一个数组,该数组包含两个新的ReadableStream
对象,每个对象都会返回Blob
的内容。 - 调用返回stream对象的
pipeThrough()
方法,通过一个TransformStream
对象或其它任意可读可写对传输流对象。
3.Blob.text()
返回一个promise且包含blob所有内容的UTF-8格式的 USVString
。
var textPromise = blob.text();
blob.text().then(text => /* do something with the text */);
var text = await blob.text();
4.Blob.arrayBuffer()
返回一个promise且包含blob所有内容的二进制格式的 ArrayBuffer
介面中的arrayBuffer()
方法会Blob
传回Promise
,并以Blob的内容解析为内含的二进位资料ArrayBuffer
。
var bufferPromise = blob.arrayBuffer();
blob.arrayBuffer().then(buffer => /* process the ArrayBuffer */);
var buffer = await blob.arrayBuffer();