Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: multipart upload, parallel requests, file chunking, HTTP, resumable upload

Как реализовать параллельную загрузку файла по частям?

Вопрос проверяет понимание методов оптимизации загрузки больших файлов через разбиение на части и параллельную отправку, что критично для скорости и надежности в современных веб-приложениях.

Короткий ответ

Параллельная загрузка файла по частям (chunked upload) разбивает большой файл на несколько меньших фрагментов (чанков). Эти фрагменты затем отправляются на сервер одновременно с помощью нескольких HTTP-запросов (например, через Promise.all). Сервер принимает части, сохраняет их временно, а после получения всех — собирает в исходный файл. Этот подход ускоряет загрузку, особенно при нестабильном соединении, и позволяет возобновить прерванную передачу.

Длинный ответ

Параллельная загрузка файла по частям — это техника, при которой большой файл делится на несколько независимых фрагментов (чанков), которые загружаются на сервер одновременно. Это позволяет обойти ограничения на размер одного HTTP-запроса, увеличить скорость загрузки за счёт использования полной пропускной способности канала и обеспечить возможность возобновления передачи при сбоях.

Основные шаги реализации

  • Разбиение файла на клиенте: Используя File API (Blob.slice), файл делится на части фиксированного размера (например, по 5 МБ).
  • Параллельная отправка: Для каждой части создаётся отдельный HTTP-запрос (обычно PUT или POST). Эти запросы выполняются параллельно, например, с помощью Promise.all в JavaScript.
  • Идентификация частей на сервере: Каждая часть отправляется с уникальным идентификатором загрузки (uploadId) и номером части (chunkIndex). Сервер сохраняет части во временное хранилище.
  • Сборка файла на сервере: После успешной загрузки всех частей клиент отправляет финальный запрос, и сервер объединяет все части в правильном порядке в итоговый файл.

Пример кода на JavaScript (клиентская часть)

async function uploadFileInParallel(file, chunkSize = 5 * 1024 * 1024) {
    const uploadId = generateUniqueId();
    const totalChunks = Math.ceil(file.size / chunkSize);
    const promises = [];

    for (let i = 0; i < totalChunks; i++) {
        const start = i * chunkSize;
        const end = Math.min(start + chunkSize, file.size);
        const chunk = file.slice(start, end);

        const formData = new FormData();
        formData.append('file', chunk);
        formData.append('uploadId', uploadId);
        formData.append('chunkIndex', i);
        formData.append('totalChunks', totalChunks);

        // Отправляем каждый чанк отдельным запросом
        const promise = fetch('/api/upload-chunk', {
            method: 'POST',
            body: formData
        }).then(res => res.json());
        promises.push(promise);
    }

    // Параллельное выполнение всех запросов на загрузку чанков
    await Promise.all(promises);
    // Финальный запрос на сборку файла
    await fetch(`/api/complete-upload?uploadId=${uploadId}`, { method: 'POST' });
    console.log('File uploaded successfully!');
}

На серверной стороне (например, на Node.js с Express) необходимо реализовать два эндпоинта: один для приёма отдельных частей, другой для их объединения. Части можно временно сохранять в файловую систему или объектное хранилище (например, S3, который поддерживает Multipart Upload из коробки).

Где применяется

Данный подход широко используется в облачных хранилищах (Google Drive, Dropbox), стриминговых платформах для загрузки видео и в enterprise-приложениях для передачи больших объёмов данных. Он особенно полезен в условиях нестабильного интернета, так как позволяет возобновить загрузку только неудавшихся частей, а не всего файла целиком.

Вывод: Параллельную загрузку по частям стоит применять при работе с большими файлами (от десятков мегабайт), когда важны скорость загрузки, отказоустойчивость и возможность возобновления передачи.

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

Ключевые слова

#multipart upload

#parallel requests

#file chunking

#HTTP

#resumable upload

Подпишись на React Developer в телеграм