Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.
Объект 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
Blobobject containing the data in the specified range of bytes of the sourceBlob.
Примеры
Пример использования конструктора 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-а.