--- title: Blob slug: Web/API/Blob translation_of: Web/API/Blob ---
{{APIRef("File API")}}

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

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

API, що працюють з  Blob, також перелічені у документації {{domxref("File")}}.

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

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

Конструктор

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

Властивості

{{domxref("Blob.isClosed")}} {{readonlyinline}} {{experimental_inline}}
Булєве значення, що вказує, чи був метод {{domxref("Blob.close()")}} викликан на Blob. Закритий Blob не може бути прочитаний.
{{domxref("Blob.size")}} {{readonlyinline}}
Розмір, у байтах, даних, що міститься у об'єкті Blob.
{{domxref("Blob.type")}} {{readonlyinline}}
Строка, що вказує MIME тип даних, що містяться у Blob. Якщо тип невідомий, ця строка порожня.

Методи

{{domxref("Blob.close()")}} {{experimental_inline}}
Закриває об'єкт Blob, можливо, звілняючи використовувані ресурси.
{{domxref("Blob.slice()", "Blob.slice([start[, end[, contentType]]])")}}
Повертає новий об'єкт Blob, що містить дані у вказаному диапазоні байтів джерела Blob.

Приклади

Приклад використання конструктора Blob

{{domxref("Blob.Blob", "Blob() constructor")}} дозволяє створювати Blob з інших об'єктів. Наприклад, щоб сконструювати Blob із стрічки:

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

До того, як конструктор Blob став доступний, це можна було зробити за допомогою {{domxref("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 це використовуючи {{domxref("FileReader")}}. Наступиний код зчитує дані з Blob у вигляді типізованого масиву.

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

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

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

Специфікация Статус Коментар
{{SpecName('File API','#blob','Blob')}} {{Spec2('File API')}} Initial definition

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

{{CompatibilityTable}}

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 5[1] 4[2] 10 11.10[1] 5.1[1]
slice() 10 {{property_prefix("webkit")}}
21
5 {{property_prefix("moz")}}[3]
13
10 12 5.1 {{property_prefix("webkit")}}
Blob() constructor 20 {{CompatGeckoDesktop("13.0")}} 10 12.10 6
close() and isClosed {{CompatUnknown}} {{CompatNo}}[4] {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}
Feature Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Basic support {{CompatUnknown}} {{CompatGeckoMobile("13.0")}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}
slice() {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}
Blob() constructor {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}
close() and isClosed {{CompatUnknown}} {{CompatNo}}[4] {{CompatUnknown}} {{CompatUnknown}} {{CompatUnknown}}

[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 {{jsxref("Array/slice", "Array.slice()")}} and {{jsxref("String/slice", "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 {{jsxref("Array/slice", "Array.slice()")}} and {{jsxref("String/slice", "String.slice()")}}, Gecko removed support and added support for the new syntax as mozSlice().

[3] Prior to Gecko 12.0 {{geckoRelease("12.0")}}, 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