Понимание разницы между объектами File и Blob

Источник: «Understanding the Difference Between File and Blob Objects»
В JavaScript для представления двоичных данных используются объекты File и Blob, но они служат для разных целей и имеют ряд различий.

Объект Blob

В JavaScript Blob — это структура данных, представляющая собой коллекцию двоичных данных в виде неизменяемого объекта. Blob обычно используется для обработки и манипулирования необработанными двоичными данными, такими как файлы, изображения, видео и другие нетекстовые данные.

Ключевые особенности Blob

  1. Неизменяемый: После создания Blob не может быть изменён. Вы можете создавать новые Blob, комбинируя существующие данные, но вы не можете изменить содержимое самого Blob.
  2. Представление данных: Blob могут содержать любой тип данных, включая текст, изображения, аудио или видео. Они позволяют разработчикам работать с двоичными данными в веб-приложениях.
  3. Размер и тип: У Blob есть два основных свойства:
    • size: Размер Blob в байтах.
    • type: MIME-тип данных (например, image/png, text/plain).
  4. Использование в API: Blob широко используются в различных Web API.
    • File API: Для работы с файлами, загруженными пользователями.
    • API Canvas: Для создания изображений из элементов canvas.
    • Fetch API: Отправка и получение двоичных данных.
  5. Создание Blob: Вы можете создать Blob с помощью конструктора:
    const myBlob = new Blob(["Hello, world!"], { type: "text/plain" });
  6. Создание объектов URL: Можно создать временный URL для Blob с помощью метода URL.createObjectURL(). Это позволяет создавать ссылки на данные Blob, используемые в браузере:
    const url = URL.createObjectURL(myBlob);
    const link = document.createElement("a");
    link.href = url;
    link.download = "hello.txt"; // Указание имени файла по умолчанию для загрузки
    link.textContent = "Download Blob";
    document.body.appendChild(link);
  7. Работа с Blob: Можно использовать с FileReader API для чтения содержимого Blob, а также отправлять их в запросах, например, через fetch или XMLHttpRequest.

Пример использования Blob

// СозданиеBlob
const myBlob = new Blob(["This is a sample text."], { type: "text/plain" });

// Создание URL для Blob
const url = URL.createObjectURL(myBlob);

// Создание ссылки для скачивания Blob
const downloadLink = document.createElement("a");
downloadLink.href = url;
downloadLink.download = "sample.txt"; // Определение имени файла
downloadLink.textContent = "Download Sample Text";

// Добавление ссылки в документ
document.body.appendChild(downloadLink);

В общем, Blob в JavaScript — это универсальный объект, используемый для работы с необработанными двоичными данными. Он позволяет работать с файлами и двоичным содержимым в веб-приложениях, обеспечивая такие функции, как загрузка, скачивание файлов и манипулирование данными.

Объект File

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

Ключевые особенности File

  1. Наследование от Blob: Объект File расширяет интерфейс Blob, то есть наследует свойства и методы от Blob. Это позволяет относиться к объектам File как к блобам двоичных данных, предоставляя при этом дополнительную информацию, специфичную для файла.
  2. Свойства: Объект File содержит несколько важных свойств: name: имя файла (включая расширение файла).
    • size: Размер файла в байтах.
    • type: MIME-тип файла (например, image/png, application/pdf).
    • lastModified: Временная метка, указывающая на последнее изменение файла (в миллисекундах с начала эпохи Unix).
    • webkitRelativePath: Относительный путь к каталогу, в основном используется при выборе нескольких файлов из каталога.
  3. Создание: Объекты File обычно создаются, когда пользователь выбирает файл с помощью HTML элемента input (<input type="file">). Получить доступ к выбранному файлу (файлам) можно через свойство files элемента input.
  4. FileReader API: FileReader API часто используется для асинхронного чтения содержимого объекта File. Это позволяет читать данные файла в текстовом или двоичном виде, что даёт возможность отображать или обрабатывать содержимое файла.
  5. Использование с API: Объекты File могут быть отправлены на сервер с помощью таких API, как fetch или XMLHttpRequest, что делает их незаменимыми для обработки загрузки файлов в веб-приложениях.

Пример использования File

Рассмотрим пример, демонстрирующий, как использовать объект File, чтобы позволить пользователям загружать файл и читать его содержимое:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>File Upload Example</title>
</head>
<body>

<input type="file" id="fileInput" />
<pre id="fileContent"></pre>

<script>
const fileInput = document.getElementById('fileInput');
const fileContent = document.getElementById('fileContent');

fileInput.addEventListener('change', (event) => {
const file = event.target.files[0]; // Получение первого выбранного файла

if (file) {
const reader = new FileReader();

reader.onload = (e) => {
fileContent.textContent = e.target.result; // отображение содержимого файла
};

reader.readAsText(file); // Чтение файла в виде текста
}
});
</script>

</body>
</html>

В общем, объект File в JavaScript — это мощное представление файла из файловой системы пользователя. Он предоставляет основные свойства для работы с файлами и широко используется в веб-приложениях для загрузки и обработки файлов. Используя объекты File вместе с FileReader API, разработчики могут с лёгкостью управлять пользовательским контентом в веб-среде.

Варианты использования

Blob

Blob обычно используется для работы с данными в памяти, создания URL-представлений двоичных данных с помощью URL.createObjectURL(), а также для отправки двоичных данных через API (например, fetch или XMLHttpRequest).

File

Объекты File в большинстве случаев используются при работе с загруженными пользователем файлами, чтении содержимого файлов с помощью FileReader API и взаимодействии с API, связанными с файлами, в веб-приложениях.

Пример использования

Рассмотрим пример, демонстрирующий использование как Blob, так и File:

// Создание Blob
const myBlob = new Blob(["Hello, world!"], { type: "text/plain" });

// Создание URL для Blob
const blobUrl = URL.createObjectURL(myBlob);
console.log(blobUrl); // URL-представление блоба

// Обработка передачи файла
const fileInput = document.querySelector('input[type="file"]');
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0]; //Доступ к первому выбранному файлу
console.log(file.name); // Запись в лог имени файла
console.log(file.size); // Запись в лог размера файла
});

Подведение итогов

Подводя итог, можно сказать, что в JavaScript для работы с двоичными данными используются как объекты File, так и Blob. Однако File представляет особый тип Blob, включающий дополнительные свойства, связанные с файлами.

Рекомендуется использовать Blob для обработки любых бинарных данных, а File — для работы с файлами, загружаемыми пользователем.

Комментарии


Дополнительные материалы

Предыдущая Статья

Новое в Symfony 7.2: Улучшение составных ограничений

Следующая Статья

Новое в Symfony 7.2: Улучшенный экстрактор переводов