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 Только для чтения
Строка с MIME-типом данных, содержащихся в Blob-е. Если тип неизвестен, строка пуста.

Методы

Blob.close()
Закрывает Blob объект, по возможности освобождая занятые им ресурсы.
Blob.slice([start[, end[, contentType]]])
Возвращает новый Blob объект, содержащий данные в указанном диапазоне байтов исходного Blob.

Примеры

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

Blob() constructor позволяет создавать blob-ы из других объектов. Например, чтобы сконструировать blob из строки:

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 для типизированного массива используя 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-а как типизированный массив.

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

Используя другие методы FileReader, возможно прочесть содержимое blob-а как строку или как data: 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] Версия slice() принимающая длину вторым аргументом была реализована в WebKit и Opera 11.10. Впрочем, этот синтаксис отличался от Array.slice() и String.slice(), поэтому WebKit удалил его поддержку и добавил поддержку для нового синтаксиса как 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] До Gecko 12.0 (Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9) существовала ошибка, которая влияла на поведение slice(); метод не работал для позиций start и end за пределами диапазона значений целого 64-битного числа со знаком; он исправлен поддержкой беззнаковых 64-битных значений.

[4] See баг 1048325

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

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

Cu.importGlobalProperties(['Blob']);

Blob доступен в Worker scopes.

Смотри также

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

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