Многокомпонентная загрузка Amazon S3 с использованием низкоуровневого API Java загружает только одну часть

Я написал следующий код для загрузки строк коллекции в S3 с использованием многостраничной загрузки (каждая часть больше 5 МБ), но когда я загружаю его обратно из S3, он содержит только строки из одной части.

import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.model.*; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class LowLevelMultipartUpload { private List<PartETag> partETags = new ArrayList<>(); private InitiateMultipartUploadResult initResponse; AmazonS3 s3Client; String bucketName; String keyName; public LowLevelMultipartUpload(AmazonS3 s3Client, String bucketName, String keyName) { this.s3Client = s3Client; this.bucketName = bucketName; this.keyName = keyName; InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, keyName); initResponse = s3Client.initiateMultipartUpload(initRequest); } public void uploadPart(int partNumber, InputStream is, ObjectMetadata objectMetadata, boolean isFinalPart) throws IOException { // Create the request to upload a part. UploadPartRequest uploadRequest = new UploadPartRequest() .withBucketName(bucketName) .withKey(keyName) .withUploadId(initResponse.getUploadId()) .withPartNumber(partNumber) .withInputStream(is) .withPartSize(is.available()) .withObjectMetadata(objectMetadata); if(isFinalPart) uploadRequest.withLastPart(true); // Upload the part and add the response’s ETag to our list. UploadPartResult uploadResult = s3Client.uploadPart(uploadRequest); partETags.add(uploadResult.getPartETag()); } public void completeUpload() { // Complete the multipart upload. CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(bucketName, keyName, initResponse.getUploadId(), partETags); s3Client.completeMultipartUpload(compRequest); } }

Я вызываю приведенный выше код в следующем порядке.

  1. Создать объект LowLevelMultipartUpload
  2. Загрузите детали в цикле
  3. Вызов завершить загрузку

Источник: ledsshop.ru

Стиль жизни - Здоровье!