Multipart Uploads предоставляет возможность сохранять файлы в Cloud Storage по частям. Это особенно полезно при работе с крупными файлами.
Процесс включает несколько этапов:
Initiate Multipart Upload — запуск процесса загрузки.
Upload Part — передача файла по отдельным частям.
List Parts — отображение всех загруженных частей файла.
Complete Multipart Upload — объединение всех загруженных частей в один файл.
Abort Multipart Upload — остановка процесса загрузки.
Initiate Multipart Upload
Эта операция инициирует процесс многокомпонентной загрузки и генерирует уникальный идентификатор, который будет использоваться для объединения всех частей, связанных с данной загрузкой. Этот идентификатор необходимо указывать в каждом последующем запросе на загрузку отдельных фрагментов.
Запрос
POST https://s3.inferit.cloud/<BUCKET NAME>/<OBJECT NAME>?uploads
Upload Part
Эта операция отвечает за загрузку отдельной части в рамках многокомпонентной загрузки. Чтобы выполнить её, необходимо передать данные этой части в запросе. Если требуется загрузить часть из уже существующего объекта, следует воспользоваться операцией копирования части.
Запрос
PUT https://s3.inferit.cloud/<BUCKET NAME>/<OBJECT NAME>?partNumber=<указать номер части объекта>&uploadId=<uploadId полученный в запросе инициализации>
Пример
PUT https://s3.inferit.cloud/testbucket/testobject?partNumber=1&uploadId=1c49a8bca7fd2112f24f69df754227b5
List Parts
Данная операция предоставляет список частей, загруженных в рамках конкретной многокомпонентной загрузки. Для её выполнения требуется указать идентификатор загрузки, который можно получить после инициализации процесса многокомпонентной загрузки. Запрос способен вернуть максимум 1000 загруженных частей. Если необходимо ограничить количество возвращаемых элементов, можно воспользоваться параметром max-parts. В случае, если многокомпонентная загрузка включает более 1000 частей, ответ будет содержать элемент NextPartNumberMarker и поле IsTruncated с установленным значением true. В последующих запросах для получения списка частей можно добавить параметр part-number-marker, присвоив ему значение NextPartNumberMarker из предыдущего ответа.
Запрос
GET https://s3.inferit.cloud/<BUCKET NAME>/<OBJECT NAME>?uploadId=123
Пример ответа
<?xml version="1.0" encoding="UTF-8"?>
<ListPartsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Bucket>testbucket</Bucket>
<Key>testfile0</Key>
<UploadId>2~kvEMZ1rliAPeKQlkS-ky3Ccu1Z-CCrt</UploadId>
<StorageClass>STANDARD</StorageClass>
<PartNumberMarker>0</PartNumberMarker>
<NextPartNumberMarker>1</NextPartNumberMarker>
<MaxParts>1000</MaxParts>
<IsTruncated>false</IsTruncated>
<Owner>
<ID>testbucket</ID>
<DisplayName>testbucket</DisplayName>
</Owner>
<Part>
<LastModified>2024-11-01T14:01:30.593Z</LastModified>
<PartNumber>1</PartNumber>
<ETag>"1c49a8bca7fd2312f64f69df755227b6"</ETag>
<Size>146208808</Size>
</Part>
</ListPartsResult>
Complete Multipart Upload
Эта операция завершает процесс многокомпонентной загрузки, объединяя все ранее загруженные части в один целый объект. После обработки данного запроса все части, загруженные ранее, будут собраны в порядке возрастания их номеров. Для успешного завершения многокомпонентной загрузки в запросе необходимо указать список загруженных частей. Для каждой из этих частей требуется предоставить её номер, а также значение заголовка ETag, которое было возвращено после загрузки этой части.
Запрос
POST https://s3.inferit.cloud/<BUCKET NAME>/<OBJECT NAME>?uploadId=123
В тело запроса необходимо добавить ранее полученный ETag, полученный из списка частей. Пример тела запроса для объекта из 3 частей:
<CompleteMultipartUpload>
<Part>
<ETag>ETag_of_part_1</ETag>
<PartNumber>1</PartNumber>
</Part>
<Part>
<ETag>ETag_of_part_2</ETag>
<PartNumber>2</PartNumber>
</Part>
<Part>
<ETag>ETag_of_part_3</ETag>
<PartNumber>3</PartNumber>
</Part>
</CompleteMultipartUpload>
Abort Multipart Upload
Эта операция предназначена для прерывания многокомпонентной загрузки. После её выполнения дальнейшая загрузка частей с использованием идентификатора прерванной загрузки станет невозможной, и место, ранее занятое загруженными частями, будет освобождено. Если в процессе загрузки находятся какие-либо части, операция может успешно завершиться, либо быть остановлена. В некоторых случаях может потребоваться несколько прерываний многокомпонентной загрузки для полного освобождения пространства, занимаемого всеми загруженными частями.
Запрос
DELETE https://s3.inferit.cloud/<BUCKET NAME>/<OBJECT NAME>?uploadId=123