Blob

Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

Объект Blob представляет из себя объект наподобии файла с неизменёнными, сырыми данными. Blob-ы представляют данные которые не важны в родном формате JavaScript. Интерфейс File основан на Blob, и наследует функциональность blob и расширяет его для поддержки файлов на системе пользователя.

Для создания Blob не из blob-ных объектов и данных, используйте конструктор Blob() . Для того чтобы создать blob из подмножества данных из другого blob-а, используйте метод slice(). Для того чтобы получить объект Blob для файла на пользовательской файловой системе, смотрите докуметацию File.

API принимающие Blob объекты также перечислены в документации File.

Заметка: Метод slice() имеет изначально задаваемую длину как второй аргумент, что используется для указания числа байт копируемых в новый Blod. Если передать параметры на подобии start + length которые превышают размер источника Blob, то возвращаемый Blob будет содержать данные от начального индекса(start index) до конца источника Blob.

Заметка:  Следует помнить ,что метод slice() имеет сторонние префиксы в некоторых браузерах: blob.mozSlice() для Firefox 12 и ранее,  так же blob.webkitSlice() в Safari. Старая версия метода slice(), без сторонних приставок, имеет иное поведение, и устарела. Поддержка для blob.mozSlice() была убрана в Firefox 30.

Конструктор

Blob(blobParts[, options])
Возвращает только что созданный Blob объект, содержимое которого состоит из конкатенации массива значений, переданного через параметр.

Свойства

Blob.isClosed Только для чтения
Логическое значение, показывающее, вызывался ли метод Blob.close() у blob. Закрытый blob не может быть прочитан.
Blob.size Только для чтения
Размер данных, содержащихся в Blob-объекте, в байтах.
Blob.type Только для чтения
A string indicating the MIME type of the data contained in the Blob. If the type is unknown, this string is empty.

Методы

Blob.close()
Закрывает Blob объект, по-возможности освобождая занятые им ресурсы.
Blob.slice([start[, end[, contentType]]])
Returns a new Blob object containing the data in the specified range of bytes of the source Blob.

Примеры

Пример использования конструктора Blob

The Blob() constructor allows one to create blobs from other objects. For example, to construct a blob from string:

var debug = {hello: "world"};
var blob = new Blob([JSON.stringify(debug, null, 2)], {type : 'application/json'});

До того как конструктор Blob был доступен, это должно быть выполнено через API BlobBuilder, который сейчас не используется:

var builder = new BlobBuilder();
var fileParts = ['<a id="a"><b id="b">hey!</b></a>'];
builder.append(fileParts[0]);
var myBlob = builder.getBlob('text/xml');

Пример для создания URL в typed array используя blob

Следующий код:

var typedArray = GetTheTypedArraySomehow();
var blob = new Blob([typedArray], {type: 'application/octet-binary'}); // pass a useful mime type here
var url = URL.createObjectURL(blob);
// url will be something like: blob:d3958f5c-0777-0845-9dcf-2cb28783acaf
// now you can use the url in any context that regular URLs can be used in, for example img.src, etc.

Пример извлечения данных из Blob

Есть только один способ прочесть контент из Blob-а это использовать FileReader. Следующий код читает контент Blob-а как typed array.

var reader = new FileReader();
reader.addEventListener("loadend", function() {
   // reader.result contains the contents of blob as a typed array
});
reader.readAsArrayBuffer(blob);

Используя другие методы FileReader, возможно прочесть контент blob-а как строку или как URL данных.

Спецификации

Specification Status Comment
File API
Определение 'Blob' в этой спецификации.
Рабочий черновик Initial definition

Браузерная совместимость

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Базовая поддержка 5[1] 4[2] 10 11.10[1] 5.1[1]
slice() 10 webkit
21
5 moz[3]
13
10 12 5.1 webkit
Blob() constructor 20 13.0 (13.0) 10 12.10 6
close() and isClosed ? Нет[4] ? ? ?
Feature Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Базовая поддержка ? 13.0 (13.0) ? ? ?
slice() ? ? ? ? ?
Blob() constructor ? ? ? ? ?
close() and isClosed ? Нет[4] ? ? ?

[1] A version of slice() taking the length as second argument was implemented in WebKit and Opera 11.10. However, since that syntax differed from Array.slice() and String.slice(), WebKit removed support and added support for the new syntax as Blob.webkitSlice().

[2] A version of slice() taking the length as second argument was implemented in Firefox 4. However, since that syntax differed from Array.slice() and String.slice(), Gecko removed support and added support for the new syntax as mozSlice().

[3] Prior to Gecko 12.0 (Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9), there was a bug that affected the behavior of slice(); it did not work for start and end positions outside the range of signed 64-bit values; it has now been fixed to support unsigned 64-bit values.

[4] See баг 1048325

Замечания Gecko: доступность в привилегированном коде

Для использования кода chrome, JSM и сферу Bootstrap, вы должны импортировать его следующим образом:

Cu.importGlobalProperties(['Blob']);

Blob доступен в пределах Worker-а.

Смотри также

Метки документа и участники

 Внесли вклад в эту страницу: lexx182a, saga111a, MuradAz
 Обновлялась последний раз: lexx182a,