Spec-Zone.ru › Web APIs

Файл

Базовая линия Широко доступна *

Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.

* Некоторые части этой функции могут иметь различный уровень поддержки.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Примечание: Эта функция доступна в Потоках веб-работы.

Интерфейс Blob представляет собой объект, похожий на файл, содержащий неизменяемые сырые данные; их можно читать как текстовые или двоичные данные, или преобразовать в ReadableStream, чтобы использовать его методы для обработки данных.

Файлы могут представлять данные, которые не обязательно находятся в формате, поддерживаемом JavaScript. Интерфейс File основан на Blob, наследуя функциональность файлов и расширяя её, чтобы поддерживать файлы на компьютере пользователя.

Использование файлов

Для создания Blob из других объектов, не являющихся файлами, и данных используйте конструктор Blob(). Чтобы создать файл, содержащий часть данных другого файла, используйте метод slice(). Чтобы получить объект Blob для файла на файловой системе пользователя, см. документацию File.

API, принимающие объекты Blob, также перечислены в документации File.

Конструктор

Blob()

Возвращает новый объект Blob, содержащий конкатенацию всех данных в массиве, переданном в конструктор.

Свойства экземпляра

Blob.size Только для чтения

Размер в байтах данных, содержащихся в объекте Blob.

Blob.type Только для чтения

Строка, указывающая MIME-тип данных, содержащихся в 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-битные значения.
5–13
12 76–7 2518–25
14До Firefox для Android 14 был баг, который влиял на работу Blob.slice(); он не работал для позиций start и end за пределами диапазона знаковых 64-битных значений; сейчас он исправлен и поддерживает беззнаковые 64-битные значения.
5–14
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

См. также

  • FileReader
  • File
  • URL.createObjectURL()
  • Использование файлов из веб-приложений

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API