Завершение multipart upload требует отправки финального запроса с частью-файлом (part), содержащим содержимое всех ранее загруженных частей. Удаление незаконченных частей происходит автоматически при успешном завершении или вручную через API, если операция прервалась.

Завершение multipart upload: получение ответа от сервера

После загрузки всех частей необходимо отправить запрос на завершение операции. Этот запрос содержит список загруженных частей с их идентификаторами (ETag) и порядковыми номерами.

Сервер проверяет целостность данных, сопоставляет ETag каждой части и формирует единый объект. Если все части верны, сервер возвращает успешный ответ с метаданными объекта.

Если хотя бы одна часть повреждена или отсутствует в списке, сервер отклоняет запрос и возвращает ошибку. В этом случае нужно либо исправить данные, либо удалить неудачные части и начать загрузку заново.

Удаление незаконченных частей

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

На стороне клиента: большинство SDK (например, AWS SDK for JavaScript) автоматически управляют частью-файлами. При успехе они удаляются сами. При ошибке — нужно вызвать метод удаления части вручную через API хранилища.

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

Обработка ошибок при завершении

Если сервер вернул ошибку (например, 400 Bad Request или 500 Internal Server Error), проверьте логи клиента и сервера. Убедитесь, что все ETag совпадают и части загружены в правильном порядке.

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

Для критически важных данных реализуйте механизм повторных попыток с экспоненциальной задержкой. Храните список загруженных частей в надежном месте (например, в базе данных), чтобы избежать дублирования.

Вопросы и ответы

Что делать, если сервер не принимает запрос на завершение?

Проверьте корректность списка частей и их ETag. Убедитесь, что все части действительно загружены и не были удалены. Если ошибка повторяется — обратитесь к документации хранилища или проверьте права доступа.

Можно ли завершить multipart upload без отправки финального запроса?

Нет. Без финального запроса сервер не сформирует единый объект. Части останутся незавершенными и будут удалены автоматически через время хранения (TTL).

Как избежать потери данных при прерывании загрузки?

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