--- title: Blob slug: Web/API/Blob translation_of: Web/API/Blob ---
Об'єкт 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.об'єкт Blob
, чий контент складається з ланцюга масивів значень вхідних парметрів.Blob
.у 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');
Наступний код:
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 це використовуючи {{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")}}
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.