JavaScript Blob — двійкові дані як файл


Blob (скорочення від binary large object) — незмінний блок двійкових даних із зазначеним типом MIME. По суті — файл, якого немає на диску.

автор: NagarD

Загальний опис

Це те, чим у браузері є будь-який файл: результат fetch, вибране зображення, згенерований звіт. Клас File — це просто Blob з іменем і датою.

Найчастіше Blob створюють, щоб віддати користувачу файл, згенерований на льоту: зібрав CSV із таблиці, зробив з нього Blob, отримав тимчасове посилання через URL.createObjectURL() — і клікнув по ньому <a download>. Жодного звертання до сервера.

Дані всередині — незмінні. «Змінити» блоб можна лише створивши новий.

автор: NagarD

Нотатка

Кожен URL.createObjectURL() тримає дані в пам'яті, доки сторінка жива. Після завантаження обов'язково клич URL.revokeObjectURL(), інакше великі файли залишаться висіти в пам'яті.

автор: NagarD

Синтаксис

const blob = new Blob([data], { type: "text/plain" });

властивості

Властивість Опис
size Розмір у байтах.
type Тип MIME.

методи

Метод Опис
slice Вирізає діапазон у новий Blob.
text Читає вміст як текст (проміс).
arrayBuffer Читає вміст як ArrayBuffer (проміс).
stream Вміст як потік для читання.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
Blob 20+ 13+ 8+ 12.1+ 12+ 10+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
Blob 4.4+ yes yes 8+

Приклади

+ запропонувати свій приклад у пісочниці

Згенерувати CSV і віддати його на завантаження — без сервера.

const rows = [['Ім\'я', 'Бали'], ['Іван', 42], ['Марія', 57]];
const csv = rows.map(row => row.join(',')).join('\n');

const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' });
const url = URL.createObjectURL(blob);

const link = document.createElement('a');
link.href = url;
link.download = 'звіт.csv';
link.click();

// не забути прибрати за собою
URL.revokeObjectURL(url);

console.log(blob.size, 'байтів,', blob.type);
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід