View a markdown version of this page

UploadPartCopy 搭配 AWS SDK 使用 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

UploadPartCopy 搭配 AWS SDK 使用

以下程式碼範例顯示如何使用 UploadPartCopy

Java
適用於 Java 2.x 的 SDK
注意

GitHub 上提供更多範例。尋找完整範例,並了解如何在 AWS 程式碼範例儲存庫中設定和執行。

根據來源物件大小建立複製零件,並透過個別零件複製到目錄儲存貯體。

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CompletedPart; import software.amazon.awssdk.services.s3.model.HeadObjectRequest; import software.amazon.awssdk.services.s3.model.HeadObjectResponse; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.model.UploadPartCopyRequest; import software.amazon.awssdk.services.s3.model.UploadPartCopyResponse; import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import static com.example.s3.util.S3DirectoryBucketUtils.abortDirectoryBucketMultipartUploads; import static com.example.s3.util.S3DirectoryBucketUtils.completeDirectoryBucketMultipartUpload; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucketMultipartUpload; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteAllObjectsInDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.getFilePath; import static com.example.s3.util.S3DirectoryBucketUtils.multipartUploadForDirectoryBucket; /** * Creates copy parts based on source object size and copies over individual * parts. * * @param s3Client The S3 client used to interact with S3 * @param sourceBucket The name of the source bucket * @param sourceKey The key (name) of the source object * @param destinationBucket The name of the destination bucket * @param destinationKey The key (name) of the destination object * @param uploadId The upload ID used to track the multipart upload * @return A list of completed parts */ public static List<CompletedPart> multipartUploadCopyForDirectoryBucket(S3Client s3Client, String sourceBucket, String sourceKey, String destinationBucket, String destinationKey, String uploadId) { // Get the object size to track the end of the copy operation HeadObjectRequest headObjectRequest = HeadObjectRequest.builder() .bucket(sourceBucket) .key(sourceKey) .build(); HeadObjectResponse headObjectResponse = s3Client.headObject(headObjectRequest); long objectSize = headObjectResponse.contentLength(); logger.info("Source Object size: {}", objectSize); // Copy the object using 20 MB parts long partSize = 20 * 1024 * 1024; // 20 MB long bytePosition = 0; int partNum = 1; List<CompletedPart> uploadedParts = new ArrayList<>(); while (bytePosition < objectSize) { long lastByte = Math.min(bytePosition + partSize - 1, objectSize - 1); logger.info("Part Number: {}, Byte Position: {}, Last Byte: {}", partNum, bytePosition, lastByte); try { UploadPartCopyRequest uploadPartCopyRequest = UploadPartCopyRequest.builder() .sourceBucket(sourceBucket) .sourceKey(sourceKey) .destinationBucket(destinationBucket) .destinationKey(destinationKey) .uploadId(uploadId) .copySourceRange("bytes=" + bytePosition + "-" + lastByte) .partNumber(partNum) .build(); UploadPartCopyResponse uploadPartCopyResponse = s3Client.uploadPartCopy(uploadPartCopyRequest); CompletedPart part = CompletedPart.builder() .partNumber(partNum) .eTag(uploadPartCopyResponse.copyPartResult().eTag()) .build(); uploadedParts.add(part); bytePosition += partSize; partNum++; } catch (S3Exception e) { logger.error("Failed to copy part number {}: {} - Error code: {}", partNum, e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode()); throw e; } } return uploadedParts; }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 UploadPartCopy

如需 AWS SDK 開發人員指南和程式碼範例的完整清單,請參閱 使用 AWS SDKs 使用 Amazon S3 進行開發。此主題也包含有關入門的資訊和舊版 SDK 的詳細資訊。