Зачем делить файл на части
Chunked upload разбивает поток на части фиксированного размера и отправляет их независимо. Сервер связывает части с upload-сессией и не смешивает их с другим объектом.
Что хранить на стороне клиента
Клиенту нужны идентификатор сессии, размер файла, размер части и номер последней подтверждённой части. После обрыва он запрашивает состояние и продолжает с первого неподтверждённого диапазона.
Повторы без дубликатов
Повтор одной части должен быть безопасным: сервер сверяет номер, длину и хэш. Тайм-аут не означает, что часть не принята, поэтому перед повтором лучше получить состояние сессии.
Финальная сборка
После всех частей клиент завершает сессию. Сервер проверяет порядок, итоговый размер и SHA-256 полного файла, затем делает файл доступным как компонент EOC. Частичный результат нельзя считать опубликованной ревизией.
Практический чек-лист
- Назначьте устойчивый размер части и тайм-аут.
- Сохраняйте прогресс вне памяти вкладки.
- Повторяйте только неизвестные части.
- Проверяйте итоговый хэш до создания ревизии.
Итог
Возобновляемая загрузка сочетает состояние сессии, идемпотентные номера частей и проверку полного файла. Это сокращает стоимость сетевых сбоев и оставляет проверяемый след.
