Файл
Базовая линия Широко доступна *
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Примечание: Эта функция доступна в Потоках веб-работы.
Интерфейс Blob представляет собой объект, похожий на файл, содержащий неизменяемые сырые данные; их можно читать как текстовые или двоичные данные, или преобразовать в ReadableStream, чтобы использовать его методы для обработки данных.
Файлы могут представлять данные, которые не обязательно находятся в формате, поддерживаемом JavaScript. Интерфейс File основан на Blob, наследуя функциональность файлов и расширяя её, чтобы поддерживать файлы на компьютере пользователя.
Использование файлов
Для создания Blob из других объектов, не являющихся файлами, и данных используйте конструктор Blob(). Чтобы создать файл, содержащий часть данных другого файла, используйте метод slice(). Чтобы получить объект Blob для файла на файловой системе пользователя, см. документацию File.
API, принимающие объекты Blob, также перечислены в документации File.
Конструктор
Blob()-
Возвращает новый объект
Blob, содержащий конкатенацию всех данных в массиве, переданном в конструктор.
Свойства экземпляра
Методы экземпляра
Blob.arrayBuffer()-
Возвращает обещание, которое разрешается объектом
ArrayBuffer, содержащим всё содержимоеBlobв виде двоичных данных. Blob.bytes()-
Возвращает обещание, которое разрешается объектом
Uint8Array, содержащим содержимоеBlob. Blob.slice()-
Возвращает новый объект
Blob, содержащий данные в заданном диапазоне байтов файла, к которому он применяется. Blob.stream()-
Возвращает
ReadableStream, который можно использовать для чтения содержимогоBlob. Blob.text()-
Возвращает обещание, которое разрешается строкой, содержащей всё содержимое
Blob, интерпретируемой как UTF-8 текст.
Примеры
Создание файла
Конструктор Blob() может создавать файлы из других объектов. Например, чтобы создать файл из JSON строки:
const obj = { hello: "world" };
const blob = new Blob([JSON.stringify(obj, null, 2)], {
type: "application/json",
});
Создание URL, представляющего содержимое типизированного массива
Следующий код создаёт JavaScript типизированный массив и создаёт новый Blob, содержащий данные типизированного массива. Затем он вызывает URL.createObjectURL(), чтобы преобразовать файл в URL.
HTML
<p> This example creates a typed array containing the ASCII codes for the space character through the letter Z, then converts it to an object URL. A link to open that object URL is created. Click the link to see the decoded object URL. </p>
JavaScript
Основная часть этого кода для примера — функция typedArrayToURL(), которая создаёт Blob из заданного типизированного массива и возвращает URL-адрес объекта для него. После преобразования данных в URL-адрес объекта, он может быть использован различными способами, включая в качестве значения атрибута <img> элемента src (разумеется, предполагая, что данные содержат изображение).
function showViewLiveResultButton() {
if (window.self !== window.top) {
// Ensure that if our document is in a frame, we get the user
// to first open it in its own tab or window. Otherwise, this
// example won't work.
const p = document.querySelector("p");
p.textContent = "";
const button = document.createElement("button");
button.textContent = "View live result of the example code above";
p.append(button);
button.addEventListener("click", () => window.open(location.href));
return true;
}
return false;
}
if (!showViewLiveResultButton()) {
function typedArrayToURL(typedArray, mimeType) {
return URL.createObjectURL(
new Blob([typedArray.buffer], { type: mimeType }),
);
}
const bytes = new Uint8Array(59);
for (let i = 0; i < 59; i++) {
bytes[i] = 32 + i;
}
const url = typedArrayToURL(bytes, "text/plain");
const link = document.createElement("a");
link.href = url;
link.innerText = "Open the array URL";
document.body.appendChild(link);
}
Результат
Извлечение данных из файла
Один из способов чтения содержимого из Blob — использование FileReader. Следующий код считывает содержимое Blob как типизированный массив:
const reader = new FileReader();
reader.addEventListener("loadend", () => {
// reader.result contains the contents of blob as a typed array
});
reader.readAsArrayBuffer(blob);
Другой способ чтения содержимого из Blob — использование Response. Следующий код считывает содержимое Blob как текст:
const text = await new Response(blob).text();
Или используя Blob.text():
const text = await blob.text();
Используя другие методы FileReader, можно прочитать содержимое файла как строку или URL данных.
Спецификации
| Спецификация |
|---|
| File API # blob-section |
Совместимость браузеров
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
Blob |
20 | 12 | 13До Firefox 16, второй параметр, при установке в значенияnull или undefined, приводил к ошибке вместо обработки как пустой словарь. |
12 | 6 | 25 | 14До Firefox для Android 16, второй параметр, при установке в значенияnull или undefined, приводил к ошибке вместо обработки как пустой словарь. |
12 | 6 | 1.5 | 4.4 |
Blob |
5 | 12 | 4 | 11 | 6 | 18 | 4 | 11 | 6 | 1.0 | 4.4 |
arrayBuffer |
76 | 79 | 69 | 63 | 14 | 76 | 79 | 54 | 14.5 | 12.0 | 76 |
bytes |
Нет | Нет | 128 | Нет | 18 | Нет | 128 | Нет | 18 | Нет | Нет |
size |
5 | 12 | 4 | 11 | 6 | 18 | 4 | 11 | 6 | 1.0 | 4.4 |
slice |
215–25 | 12 | 13До Firefox 12 был баг, который влиял на работуBlob.slice(); он не работал для позиций start и end за пределами диапазона знаковых 64-битных значений; сейчас он исправлен и поддерживает беззнаковые 64-битные значения. |
12 | 76–7 | 2518–25 | 14До Firefox для Android 14 был баг, который влиял на работуBlob.slice(); он не работал для позиций start и end за пределами диапазона знаковых 64-битных значений; сейчас он исправлен и поддерживает беззнаковые 64-битные значения. |
12 | 76–7 | 1.51.0–1.5 | 4.4 |
stream |
76 | 79 | 69 | 63 | 14.1 | 76 | 79 | 54 | 14.5 | 12.0 | 76 |
text |
76 | 79 | 69 | 63 | 14 | 76 | 79 | 54 | 14.5 | 12.0 | 76 |
type |
5 | 12 | 4 | 11 | 6 | 18 | 4 | 11 | 6 | 1.0 | 4.4 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Blob