Blob

Переклад не закінчено. Будь ласка, допоможіть перекласти цю статтю з англійської.

Об'єкт Blob являє собою файло-подібний об'єкт незмінних, початкових даних. Blob представляє дані, що не обов'язкові у нативному форматі JavaScript. Вигляд File заснований на Blob, наслідує функціонал Blob та доповнює його для підтримки файлів з файлової системи користувача.

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

API, що працюють з  Blob, також перераховані у документації File.

Зауваження: Метод slice() другим парметром приймає початкову довжину для індикації кількості байтів, які будуть скопійовані у новий Blob. Якщо вказувати змінні таким чином: початковій індекс + довижина, що привищує розмір джерела Blob, повератємий Blob буде містити дані від початкового індексу до кінця джерела Blob.

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

Конструктор

Blob(blobParts[, options])
Повертає новостворенний об'єкт Blob, чий контент складається з ланцюга масивів значень вхідних парметрів.

Властивості

Blob.isClosed Read only
Булєве значення, що вказує, чи був метод Blob.close() викликан на Blob. Закритий Blob не може бути прочитаний.
Blob.size Read only
Розмір, у байтах, даних, що міститься у об'єкті Blob.
Blob.type Read only
Строка, що вказує 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 став доступний, це можна було зробити за допомогою BlobBuilder API, яка зараз вважається застарілою:

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 буде виглядати наступним чином: blob:d3958f5c-0777-0845-9dcf-2cb28783acaf
// тепер ви можете використовувати url у будь-якому контексті, де можуть бути використані звичайні URLs, наприклад img.src, тощо.

Приклад отримання даних з Blob

Єдиний шлях для отримання даних з Blob це використовуючи FileReader. Наступиний код зчитує дані з Blob у вигляді типізованого масиву.

var reader = new FileReader();
reader.addEventListener("loadend", function() {
   // reader.result містить контент Blob у вигляді типізованого масиву
});
reader.readAsArrayBuffer(blob);

Вікористовуючи інші методи FileReader, можна прочитати контент Blob у вигляді строки або URL.

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

Специфікация Статус Коментар
File API
The definition of 'Blob' in that specification.
Working Draft Initial definition

Сумісність з браузерами

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 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 ? No support[4] ? ? ?
Feature Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Basic support ? 13.0 (13.0) ? ? ?
slice() ? ? ? ? ?
Blob() constructor ? ? ? ? ?
close() and isClosed ? No support[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 bug 1048325

Gecko notes: availability in privileged code

To use from chrome code, JSM and Bootstrap scope, you have to import it like this:

Cu.importGlobalProperties(['Blob']);

Blob is available in Worker scopes.

See also

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

 Зробили внесок у цю сторінку: angry-grandma, curdwithraisins
 Востаннє оновлена: angry-grandma,