Загрузка объекта
Используйте PutObject для обычной загрузки. Object key — это полный путь после bucket; создавать префиксы директорий отдельно не требуется.
aws s3 cp ./archive.tar s3://<bucket>/backups/archive.tar \
--endpoint-url https://storage.acdn.uz \
--profile acdn
Копирование существующего объекта
- CopyObject поддерживает копирование внутри одного bucket storage zone.
- Source-объект может находиться на другой реплике хранилища — gateway разрешает это прозрачно.
- Максимальный размер source для CopyObject — 5 GiB. Multipart copy через UploadPartCopy не поддерживается.
- Метаданные можно скопировать или заменить стандартным header x-amz-metadata-directive.
S3 multipart upload
Используйте multipart для больших объектов и загрузок, где важны независимые retry. Обычные S3-клиенты управляют lifecycle без специальных запросов ACDN.
- Поддерживаются CreateMultipartUpload, UploadPart, CompleteMultipartUpload и AbortMultipartUpload.
- Части можно загружать параллельно, повторять или заменять повторной загрузкой того же part number.
- Все части, кроме последней, должны быть не меньше 5 МиБ. Один объект может содержать максимум 10 000 частей.
- CompleteMultipartUpload требует возрастающий порядок part number и точный ETag каждой загруженной части.
- AbortMultipartUpload удаляет временные части. Незавершённая загрузка не видна как объект.
- Итоговый multipart ETag является составным и не должен использоваться как MD5 всего файла.
- S3 multipart upload — не HTML-запрос multipart/form-data.
Multipart через Laravel Flysystem
Flysystem и AWS SDK автоматически переключаются на multipart выше заданного порога. writeStream() ограничивает потребление памяти приложения.
Storage::disk('acdn_s3')->writeStream('backups/archive.tar', $stream, [
'mimetype' => 'application/octet-stream',
'part_size' => 64 * 1024 * 1024,
]);