JavaScript Blob.slice() — частина файлу без завантаження всього


Метод slice() повертає новий блоб із частини цього — так само, як slice() у масиву.

автор: NagarD

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

Найважливіше: він не читає дані в пам'ять. Це просто посилання на діапазон байтів — миттєве й безкоштовне, навіть для гігабайтного файлу.

Саме на цьому побудоване завантаження великих файлів частинами: ріжемо файл на шматки по кілька мегабайтів і шлемо їх окремими запитами. Обірвалась мережа — продовжуємо з тієї частини, на якій зупинились, а не з початку.

Третім аргументом можна задати новий тип MIME.

автор: NagarD

Порада

Щоб перевірити сигнатуру формату, не читай увесь файл: await file.slice(0, 8).arrayBuffer() дістане перші вісім байтів гігабайтного відео миттєво.

автор: NagarD

Переглядачі

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

Приклади

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

Завантаження великого файлу частинами.

const CHUNK = 5 * 1024 * 1024; // 5 МБ

async function upload(file) {
    for (let start = 0; start < file.size; start += CHUNK) {
        // не читає в пам'ять — просто посилання на діапазон
        const chunk = file.slice(start, start + CHUNK);

        const data = new FormData();
        data.append('chunk', chunk);
        data.append('offset', String(start));

        await fetch('/api/upload', { method: 'POST', body: data });

        console.log(Math.round(start / file.size * 100) + '%');
    }
}
автор: NagarD

Коментарі

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

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

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

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

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

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

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

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

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

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

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