使用適用於 Java 2.x 的 SDK 的 S3 目錄儲存貯體範例 - AWS SDK for Java 2.x

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

使用適用於 Java 2.x 的 SDK 的 S3 目錄儲存貯體範例

下列程式碼範例示範如何使用 AWS SDK for Java 2.x 搭配 S3 Directory Buckets 來執行動作和實作常見案例。

Actions 是大型程式的程式碼摘錄,必須在內容中執行。雖然動作會告訴您如何呼叫個別服務函數,但您可以在其相關情境中查看內容中的動作。

案例是向您展示如何呼叫服務中的多個函數或與其他 AWS 服務組合來完成特定任務的程式碼範例。

每個範例都包含完整原始程式碼的連結,您可以在其中找到如何在內容中設定和執行程式碼的指示。

開始使用

下列程式碼範例說明如何開始使用 Amazon S3 目錄儲存貯體。

SDK for Java 2.x
注意

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

package com.example.s3.directorybucket; 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.Bucket; import software.amazon.awssdk.services.s3.model.BucketInfo; import software.amazon.awssdk.services.s3.model.BucketType; import software.amazon.awssdk.services.s3.model.CreateBucketConfiguration; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.CreateBucketResponse; import software.amazon.awssdk.services.s3.model.DataRedundancy; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.model.ListDirectoryBucketsRequest; import software.amazon.awssdk.services.s3.model.ListDirectoryBucketsResponse; import software.amazon.awssdk.services.s3.model.LocationInfo; import software.amazon.awssdk.services.s3.model.LocationType; import software.amazon.awssdk.services.s3.model.S3Exception; import java.util.List; import java.util.stream.Collectors; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; /** * Before running this example: * <p> * The SDK must be able to authenticate AWS requests on your behalf. If you have * not configured * authentication for SDKs and tools, see * https://docs.aws.amazon.com/sdkref/latest/guide/access.html in the AWS SDKs * and Tools Reference Guide. * <p> * You must have a runtime environment configured with the Java SDK. * See * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html in * the Developer Guide if this is not set up. * <p> * To use S3 directory buckets, configure a gateway VPC endpoint. This is the * recommended method to enable directory bucket traffic without * requiring an internet gateway or NAT device. For more information on * configuring VPC gateway endpoints, visit * https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-networking.html#s3-express-networking-vpc-gateway. * <p> * Directory buckets are available in specific AWS Regions and Zones. For * details on Regions and Zones supporting directory buckets, see * https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-networking.html#s3-express-endpoints. */ public class HelloS3DirectoryBuckets { private static final Logger logger = LoggerFactory.getLogger(HelloS3DirectoryBuckets.class); public static void main(String[] args) { String bucketName = "test-bucket-" + System.currentTimeMillis() + "--usw2-az1--x-s3"; Region region = Region.US_WEST_2; String zone = "usw2-az1"; S3Client s3Client = createS3Client(region); try { // Create the directory bucket createDirectoryBucket(s3Client, bucketName, zone); logger.info("Created bucket: {}", bucketName); // List all directory buckets List<String> bucketNames = listDirectoryBuckets(s3Client); bucketNames.forEach(name -> logger.info("Bucket Name: {}", name)); } catch (S3Exception e) { logger.error("An error occurred during S3 operations: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); } finally { try { // Delete the created bucket deleteDirectoryBucket(s3Client, bucketName); logger.info("Deleted bucket: {}", bucketName); } catch (S3Exception e) { logger.error("Failed to delete the bucket due to S3 error: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); } catch (RuntimeException e) { logger.error("Failed to delete the bucket due to unexpected error: {}", e.getMessage(), e); } finally { s3Client.close(); } } } /** * Creates a new S3 directory bucket in a specified Zone (For example, a * specified Availability Zone in this code example). * * @param s3Client The S3 client used to create the bucket * @param bucketName The name of the bucket to be created * @param zone The region where the bucket will be created * @throws S3Exception if there's an error creating the bucket */ public static void createDirectoryBucket(S3Client s3Client, String bucketName, String zone) throws S3Exception { logger.info("Creating bucket: {}", bucketName); CreateBucketConfiguration bucketConfiguration = CreateBucketConfiguration.builder() .location(LocationInfo.builder() .type(LocationType.AVAILABILITY_ZONE) .name(zone).build()) .bucket(BucketInfo.builder() .type(BucketType.DIRECTORY) .dataRedundancy(DataRedundancy.SINGLE_AVAILABILITY_ZONE) .build()) .build(); try { CreateBucketRequest bucketRequest = CreateBucketRequest.builder() .bucket(bucketName) .createBucketConfiguration(bucketConfiguration).build(); CreateBucketResponse response = s3Client.createBucket(bucketRequest); logger.info("Bucket created successfully with location: {}", response.location()); } catch (S3Exception e) { logger.error("Error creating bucket: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } } /** * Lists all S3 directory buckets. * * @param s3Client The S3 client used to interact with S3 * @return A list of bucket names */ public static List<String> listDirectoryBuckets(S3Client s3Client) { logger.info("Listing all directory buckets"); try { // Create a ListBucketsRequest ListDirectoryBucketsRequest listBucketsRequest = ListDirectoryBucketsRequest.builder().build(); // Retrieve the list of buckets ListDirectoryBucketsResponse response = s3Client.listDirectoryBuckets(listBucketsRequest); // Extract bucket names List<String> bucketNames = response.buckets().stream() .map(Bucket::name) .collect(Collectors.toList()); return bucketNames; } catch (S3Exception e) { logger.error("Failed to list buckets: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } } /** * Deletes the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the bucket to delete */ public static void deleteDirectoryBucket(S3Client s3Client, String bucketName) { try { DeleteBucketRequest deleteBucketRequest = DeleteBucketRequest.builder() .bucket(bucketName) .build(); s3Client.deleteBucket(deleteBucketRequest); } catch (S3Exception e) { logger.error("Failed to delete bucket: " + bucketName + " - Error code: " + e.awsErrorDetails().errorCode(), e); throw e; } } }

動作

下列程式碼範例示範如何使用 AbortMultipartUpload

SDK for Java 2.x
注意

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.AbortMultipartUploadRequest; import software.amazon.awssdk.services.s3.model.S3Exception; 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.deleteDirectoryBucket; /** * Aborts a specific multipart upload for the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param objectKey The key (name) of the object to be uploaded * @param uploadId The upload ID of the multipart upload to abort * @return True if the multipart upload is successfully aborted, false otherwise */ public static boolean abortDirectoryBucketMultipartUpload(S3Client s3Client, String bucketName, String objectKey, String uploadId) { logger.info("Aborting multipart upload: {} for bucket: {}", uploadId, bucketName); try { // Abort the multipart upload AbortMultipartUploadRequest abortMultipartUploadRequest = AbortMultipartUploadRequest.builder() .bucket(bucketName) .key(objectKey) .uploadId(uploadId) .build(); s3Client.abortMultipartUpload(abortMultipartUploadRequest); logger.info("Aborted multipart upload: {} for object: {}", uploadId, objectKey); return true; } catch (S3Exception e) { logger.error("Failed to abort multipart upload: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); return false; } }

下列程式碼範例示範如何使用 CompleteMultipartUpload

SDK for Java 2.x
注意

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

在目錄儲存貯體中完成分段上傳。

import com.example.s3.util.S3DirectoryBucketUtils; 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.CompleteMultipartUploadRequest; import software.amazon.awssdk.services.s3.model.CompleteMultipartUploadResponse; import software.amazon.awssdk.services.s3.model.CompletedMultipartUpload; import software.amazon.awssdk.services.s3.model.CompletedPart; import software.amazon.awssdk.services.s3.model.S3Exception; import java.io.IOException; import java.nio.file.Path; import java.util.List; 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; /** * This method completes the multipart upload request by collating all the * upload parts. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param objectKey The key (name) of the object to be uploaded * @param uploadId The upload ID used to track the multipart upload * @param uploadParts The list of completed parts * @return True if the multipart upload is successfully completed, false * otherwise */ public static boolean completeDirectoryBucketMultipartUpload(S3Client s3Client, String bucketName, String objectKey, String uploadId, List<CompletedPart> uploadParts) { try { CompletedMultipartUpload completedMultipartUpload = CompletedMultipartUpload.builder() .parts(uploadParts) .build(); CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest.builder() .bucket(bucketName) .key(objectKey) .uploadId(uploadId) .multipartUpload(completedMultipartUpload) .build(); CompleteMultipartUploadResponse response = s3Client.completeMultipartUpload(completeMultipartUploadRequest); logger.info("Multipart upload completed. ETag: {}", response.eTag()); return true; } catch (S3Exception e) { logger.error("Failed to complete multipart upload: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); return false; } }

下列程式碼範例示範如何使用 CopyObject

SDK for Java 2.x
注意

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.CopyObjectRequest; import software.amazon.awssdk.services.s3.model.CopyObjectResponse; import software.amazon.awssdk.services.s3.model.S3Exception; import java.nio.file.Path; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; 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.putDirectoryBucketObject; /** * Copies an object from one S3 general purpose bucket to one S3 directory * bucket. * * @param s3Client The S3 client used to interact with S3 * @param sourceBucket The name of the source bucket * @param objectKey The key (name) of the object to be copied * @param targetBucket The name of the target bucket */ public static void copyDirectoryBucketObject(S3Client s3Client, String sourceBucket, String objectKey, String targetBucket) { logger.info("Copying object: {} from bucket: {} to bucket: {}", objectKey, sourceBucket, targetBucket); try { // Create a CopyObjectRequest CopyObjectRequest copyReq = CopyObjectRequest.builder() .sourceBucket(sourceBucket) .sourceKey(objectKey) .destinationBucket(targetBucket) .destinationKey(objectKey) .build(); // Copy the object CopyObjectResponse copyRes = s3Client.copyObject(copyReq); logger.info("Successfully copied {} from bucket {} into bucket {}. CopyObjectResponse: {}", objectKey, sourceBucket, targetBucket, copyRes.copyObjectResult().toString()); } catch (S3Exception e) { logger.error("Failed to copy object: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 CopyObject

下列程式碼範例示範如何使用 CreateBucket

SDK for Java 2.x
注意

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

建立 S3 目錄儲存貯體。

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.BucketInfo; import software.amazon.awssdk.services.s3.model.BucketType; import software.amazon.awssdk.services.s3.model.CreateBucketConfiguration; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.CreateBucketResponse; import software.amazon.awssdk.services.s3.model.DataRedundancy; import software.amazon.awssdk.services.s3.model.LocationInfo; import software.amazon.awssdk.services.s3.model.LocationType; import software.amazon.awssdk.services.s3.model.S3Exception; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; /** * Creates a new S3 directory bucket in a specified Zone (For example, a * specified Availability Zone in this code example). * * @param s3Client The S3 client used to create the bucket * @param bucketName The name of the bucket to be created * @param zone The region where the bucket will be created * @throws S3Exception if there's an error creating the bucket */ public static void createDirectoryBucket(S3Client s3Client, String bucketName, String zone) throws S3Exception { logger.info("Creating bucket: {}", bucketName); CreateBucketConfiguration bucketConfiguration = CreateBucketConfiguration.builder() .location(LocationInfo.builder() .type(LocationType.AVAILABILITY_ZONE) .name(zone).build()) .bucket(BucketInfo.builder() .type(BucketType.DIRECTORY) .dataRedundancy(DataRedundancy.SINGLE_AVAILABILITY_ZONE) .build()) .build(); try { CreateBucketRequest bucketRequest = CreateBucketRequest.builder() .bucket(bucketName) .createBucketConfiguration(bucketConfiguration).build(); CreateBucketResponse response = s3Client.createBucket(bucketRequest); logger.info("Bucket created successfully with location: {}", response.location()); } catch (S3Exception e) { logger.error("Error creating bucket: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 CreateBucket

下列程式碼範例示範如何使用 CreateMultipartUpload

SDK for Java 2.x
注意

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

在目錄儲存貯體中建立分段上傳。

import com.example.s3.util.S3DirectoryBucketUtils; 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.CreateMultipartUploadRequest; import software.amazon.awssdk.services.s3.model.CreateMultipartUploadResponse; import software.amazon.awssdk.services.s3.model.S3Exception; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; /** * This method creates a multipart upload request that generates a unique upload * ID used to track * all the upload parts. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param objectKey The key (name) of the object to be uploaded * @return The upload ID used to track the multipart upload */ public static String createDirectoryBucketMultipartUpload(S3Client s3Client, String bucketName, String objectKey) { logger.info("Creating multipart upload for object: {} in bucket: {}", objectKey, bucketName); try { // Create a CreateMultipartUploadRequest CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder() .bucket(bucketName) .key(objectKey) .build(); // Initiate the multipart upload CreateMultipartUploadResponse response = s3Client.createMultipartUpload(createMultipartUploadRequest); String uploadId = response.uploadId(); logger.info("Multipart upload initiated. Upload ID: {}", uploadId); return uploadId; } catch (S3Exception e) { logger.error("Failed to create multipart upload: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }

下列程式碼範例示範如何使用 DeleteBucket

SDK for Java 2.x
注意

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

刪除 S3 目錄儲存貯體。

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.DeleteBucketRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; /** * Deletes the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket to delete */ public static void deleteDirectoryBucket(S3Client s3Client, String bucketName) { logger.info("Deleting bucket: {}", bucketName); try { // Create a DeleteBucketRequest DeleteBucketRequest deleteBucketRequest = DeleteBucketRequest.builder() .bucket(bucketName) .build(); // Delete the bucket s3Client.deleteBucket(deleteBucketRequest); logger.info("Successfully deleted bucket: {}", bucketName); } catch (S3Exception e) { logger.error("Failed to delete bucket: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 DeleteBucket

下列程式碼範例示範如何使用 DeleteBucketEncryption

SDK for Java 2.x
注意

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

刪除目錄儲存貯體的加密組態。

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.DeleteBucketEncryptionRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; /** * Deletes the encryption configuration from an S3 bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket */ public static void deleteDirectoryBucketEncryption(S3Client s3Client, String bucketName) { DeleteBucketEncryptionRequest deleteRequest = DeleteBucketEncryptionRequest.builder() .bucket(bucketName) .build(); try { s3Client.deleteBucketEncryption(deleteRequest); logger.info("Bucket encryption deleted for bucket: {}", bucketName); } catch (S3Exception e) { logger.error("Failed to delete bucket encryption: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }

下列程式碼範例示範如何使用 DeleteBucketPolicy

SDK for Java 2.x
注意

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

刪除目錄儲存貯體的儲存貯體政策。

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.DeleteBucketPolicyRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.getAwsAccountId; import static com.example.s3.util.S3DirectoryBucketUtils.putDirectoryBucketPolicy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Deletes the bucket policy for the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket */ public static void deleteDirectoryBucketPolicy(S3Client s3Client, String bucketName) { logger.info("Deleting policy for bucket: {}", bucketName); try { // Create a DeleteBucketPolicyRequest DeleteBucketPolicyRequest deletePolicyReq = DeleteBucketPolicyRequest.builder() .bucket(bucketName) .build(); // Delete the bucket policy s3Client.deleteBucketPolicy(deletePolicyReq); logger.info("Successfully deleted bucket policy"); } catch (S3Exception e) { logger.error("Failed to delete bucket policy: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 DeleteBucketPolicy

下列程式碼範例示範如何使用 DeleteObject

SDK for Java 2.x
注意

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.DeleteObjectRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import java.nio.file.Path; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.getFilePath; import static com.example.s3.util.S3DirectoryBucketUtils.putDirectoryBucketObject; /** * Deletes an object from the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param objectKey The key (name) of the object to be deleted */ public static void deleteDirectoryBucketObject(S3Client s3Client, String bucketName, String objectKey) { logger.info("Deleting object: {} from bucket: {}", objectKey, bucketName); try { // Create a DeleteObjectRequest DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder() .bucket(bucketName) .key(objectKey) .build(); // Delete the object s3Client.deleteObject(deleteObjectRequest); logger.info("Object {} has been deleted", objectKey); } catch (S3Exception e) { logger.error("Failed to delete object: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 DeleteObject

下列程式碼範例示範如何使用 DeleteObjects

SDK for Java 2.x
注意

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

刪除目錄儲存貯體中的多個物件。

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.Delete; import software.amazon.awssdk.services.s3.model.DeleteObjectsRequest; import software.amazon.awssdk.services.s3.model.DeleteObjectsResponse; import software.amazon.awssdk.services.s3.model.ObjectIdentifier; import software.amazon.awssdk.services.s3.model.S3Exception; import java.net.URISyntaxException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.getFilePath; import static com.example.s3.util.S3DirectoryBucketUtils.putDirectoryBucketObject; /** * Deletes multiple objects from the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param objectKeys The list of keys (names) of the objects to be deleted */ public static void deleteDirectoryBucketObjects(S3Client s3Client, String bucketName, List<String> objectKeys) { logger.info("Deleting objects from bucket: {}", bucketName); try { // Create a list of ObjectIdentifier List<ObjectIdentifier> identifiers = objectKeys.stream() .map(key -> ObjectIdentifier.builder().key(key).build()) .toList(); // Create a Delete object Delete delete = Delete.builder() .objects(identifiers) .build(); // Create a DeleteObjectsRequest DeleteObjectsRequest deleteObjectsRequest = DeleteObjectsRequest.builder() .bucket(bucketName) .delete(delete) .build(); // Delete the objects DeleteObjectsResponse deleteObjectsResponse = s3Client.deleteObjects(deleteObjectsRequest); deleteObjectsResponse.deleted().forEach(deleted -> logger.info("Deleted object: {}", deleted.key())); } catch (S3Exception e) { logger.error("Failed to delete objects: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 DeleteObjects

下列程式碼範例示範如何使用 GetBucketEncryption

SDK for Java 2.x
注意

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.GetBucketEncryptionRequest; import software.amazon.awssdk.services.s3.model.GetBucketEncryptionResponse; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.model.ServerSideEncryptionRule; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; /** * Retrieves the encryption configuration for an S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @return The type of server-side encryption applied to the bucket (e.g., * AES256, aws:kms) */ public static String getDirectoryBucketEncryption(S3Client s3Client, String bucketName) { try { // Create a GetBucketEncryptionRequest GetBucketEncryptionRequest getRequest = GetBucketEncryptionRequest.builder() .bucket(bucketName) .build(); // Retrieve the bucket encryption configuration GetBucketEncryptionResponse response = s3Client.getBucketEncryption(getRequest); ServerSideEncryptionRule rule = response.serverSideEncryptionConfiguration().rules().get(0); String encryptionType = rule.applyServerSideEncryptionByDefault().sseAlgorithmAsString(); logger.info("Bucket encryption algorithm: {}", encryptionType); logger.info("KMS Customer Managed Key ID: {}", rule.applyServerSideEncryptionByDefault().kmsMasterKeyID()); logger.info("Bucket Key Enabled: {}", rule.bucketKeyEnabled()); return encryptionType; } catch (S3Exception e) { logger.error("Failed to get bucket encryption: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }
  • 如需 API 詳細資訊,請參閱 AWS SDK for Java 2.x API 參考中的 GetBucketEncryption

下列程式碼範例示範如何使用 GetBucketPolicy

SDK for Java 2.x
注意

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.GetBucketPolicyRequest; import software.amazon.awssdk.services.s3.model.GetBucketPolicyResponse; import software.amazon.awssdk.services.s3.model.S3Exception; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.getAwsAccountId; import static com.example.s3.util.S3DirectoryBucketUtils.putDirectoryBucketPolicy; /** * Retrieves the bucket policy for the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @return The bucket policy text */ public static String getDirectoryBucketPolicy(S3Client s3Client, String bucketName) { logger.info("Getting policy for bucket: {}", bucketName); try { // Create a GetBucketPolicyRequest GetBucketPolicyRequest policyReq = GetBucketPolicyRequest.builder() .bucket(bucketName) .build(); // Retrieve the bucket policy GetBucketPolicyResponse response = s3Client.getBucketPolicy(policyReq); // Print and return the policy text String policyText = response.policy(); logger.info("Bucket policy: {}", policyText); return policyText; } catch (S3Exception e) { logger.error("Failed to get bucket policy: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 GetBucketPolicy

下列程式碼範例示範如何使用 GetObject

SDK for Java 2.x
注意

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

從目錄儲存貯體取得物件。

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.core.ResponseBytes; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.S3Exception; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; 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.putDirectoryBucketObject; /** * Retrieves an object from the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param objectKey The key (name) of the object to be retrieved * @return The retrieved object as a ResponseInputStream */ public static boolean getDirectoryBucketObject(S3Client s3Client, String bucketName, String objectKey) { logger.info("Retrieving object: {} from bucket: {}", objectKey, bucketName); try { // Create a GetObjectRequest GetObjectRequest objectRequest = GetObjectRequest.builder() .key(objectKey) .bucket(bucketName) .build(); // Retrieve the object as bytes ResponseBytes<GetObjectResponse> objectBytes = s3Client.getObjectAsBytes(objectRequest); byte[] data = objectBytes.asByteArray(); // Print object contents to console String objectContent = new String(data, StandardCharsets.UTF_8); logger.info("Object contents: \n{}", objectContent); return true; } catch (S3Exception e) { logger.error("Failed to retrieve object: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); return false; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 GetObject

下列程式碼範例示範如何使用 GetObjectAttributes

SDK for Java 2.x
注意

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.GetObjectAttributesRequest; import software.amazon.awssdk.services.s3.model.GetObjectAttributesResponse; import software.amazon.awssdk.services.s3.model.ObjectAttributes; import software.amazon.awssdk.services.s3.model.S3Exception; import java.nio.file.Path; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; 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.putDirectoryBucketObject; /** * Retrieves attributes for an object in the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param objectKey The key (name) of the object to retrieve attributes for * @return True if the object attributes are successfully retrieved, false * otherwise */ public static boolean getDirectoryBucketObjectAttributes(S3Client s3Client, String bucketName, String objectKey) { logger.info("Retrieving attributes for object: {} from bucket: {}", objectKey, bucketName); try { // Create a GetObjectAttributesRequest GetObjectAttributesRequest getObjectAttributesRequest = GetObjectAttributesRequest.builder() .bucket(bucketName) .key(objectKey) .objectAttributes(ObjectAttributes.E_TAG, ObjectAttributes.STORAGE_CLASS, ObjectAttributes.OBJECT_SIZE) .build(); // Retrieve the object attributes GetObjectAttributesResponse response = s3Client.getObjectAttributes(getObjectAttributesRequest); logger.info("Attributes for object {}:", objectKey); logger.info("ETag: {}", response.eTag()); logger.info("Storage Class: {}", response.storageClass()); logger.info("Object Size: {}", response.objectSize()); return true; } catch (S3Exception e) { logger.error("Failed to retrieve object attributes: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); return false; } }
  • 如需 API 詳細資訊,請參閱 AWS SDK for Java 2.x API 參考中的 GetObjectAttributes

下列程式碼範例示範如何使用 HeadBucket

SDK for Java 2.x
注意

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

檢查指定的 S3 目錄儲存貯體是否存在且可供存取。

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.HeadBucketRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; /** * Checks if the specified S3 directory bucket exists and is accessible. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket to check * @return True if the bucket exists and is accessible, false otherwise */ public static boolean headDirectoryBucket(S3Client s3Client, String bucketName) { logger.info("Checking if bucket exists: {}", bucketName); try { // Create a HeadBucketRequest HeadBucketRequest headBucketRequest = HeadBucketRequest.builder() .bucket(bucketName) .build(); // If the bucket doesn't exist, the following statement throws NoSuchBucketException, // which is a subclass of S3Exception. s3Client.headBucket(headBucketRequest); logger.info("Amazon S3 directory bucket: \"{}\" found.", bucketName); return true; } catch (S3Exception e) { logger.error("Failed to access bucket: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 HeadBucket

下列程式碼範例示範如何使用 HeadObject

SDK for Java 2.x
注意

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.HeadObjectRequest; import software.amazon.awssdk.services.s3.model.HeadObjectResponse; import software.amazon.awssdk.services.s3.model.S3Exception; import java.nio.file.Path; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; 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.putDirectoryBucketObject; /** * Retrieves metadata for an object in the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param objectKey The key (name) of the object to retrieve metadata for * @return True if the object exists, false otherwise */ public static boolean headDirectoryBucketObject(S3Client s3Client, String bucketName, String objectKey) { logger.info("Retrieving metadata for object: {} from bucket: {}", objectKey, bucketName); try { // Create a HeadObjectRequest HeadObjectRequest headObjectRequest = HeadObjectRequest.builder() .bucket(bucketName) .key(objectKey) .build(); // Retrieve the object metadata HeadObjectResponse response = s3Client.headObject(headObjectRequest); logger.info("Amazon S3 object: \"{}\" found in bucket: \"{}\" with ETag: \"{}\"", objectKey, bucketName, response.eTag()); logger.info("Content-Type: {}", response.contentType()); logger.info("Content-Length: {}", response.contentLength()); logger.info("Last Modified: {}", response.lastModified()); return true; } catch (S3Exception e) { logger.error("Failed to retrieve object metadata: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); return false; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 HeadObject

下列程式碼範例示範如何使用 ListDirectoryBuckets

SDK for Java 2.x
注意

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.Bucket; import software.amazon.awssdk.services.s3.model.ListDirectoryBucketsRequest; import software.amazon.awssdk.services.s3.model.ListDirectoryBucketsResponse; import software.amazon.awssdk.services.s3.model.S3Exception; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; /** * Lists all S3 directory buckets and no general purpose buckets. * * @param s3Client The S3 client used to interact with S3 * @return A list of bucket names */ public static List<String> listDirectoryBuckets(S3Client s3Client) { logger.info("Listing all directory buckets"); try { // Create a ListBucketsRequest ListDirectoryBucketsRequest listDirectoryBucketsRequest = ListDirectoryBucketsRequest.builder().build(); // Retrieve the list of buckets ListDirectoryBucketsResponse response = s3Client.listDirectoryBuckets(listDirectoryBucketsRequest); // Extract bucket names List<String> bucketNames = response.buckets().stream() .map(Bucket::name) .collect(Collectors.toList()); return bucketNames; } catch (S3Exception e) { logger.error("Failed to list buckets: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode()); throw e; } }

下列程式碼範例示範如何使用 ListMultipartUploads

SDK for Java 2.x
注意

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.ListMultipartUploadsRequest; import software.amazon.awssdk.services.s3.model.ListMultipartUploadsResponse; import software.amazon.awssdk.services.s3.model.MultipartUpload; import software.amazon.awssdk.services.s3.model.S3Exception; import java.io.IOException; import java.nio.file.Path; import java.util.List; import static com.example.s3.util.S3DirectoryBucketUtils.abortDirectoryBucketMultipartUploads; 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.deleteDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.getFilePath; import static com.example.s3.util.S3DirectoryBucketUtils.multipartUploadForDirectoryBucket; /** * Lists multipart uploads for the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @return A list of MultipartUpload objects representing the multipart uploads */ public static List<MultipartUpload> listDirectoryBucketMultipartUploads(S3Client s3Client, String bucketName) { logger.info("Listing in-progress multipart uploads for bucket: {}", bucketName); try { // Create a ListMultipartUploadsRequest ListMultipartUploadsRequest listMultipartUploadsRequest = ListMultipartUploadsRequest.builder() .bucket(bucketName) .build(); // List the multipart uploads ListMultipartUploadsResponse response = s3Client.listMultipartUploads(listMultipartUploadsRequest); List<MultipartUpload> uploads = response.uploads(); for (MultipartUpload upload : uploads) { logger.info("In-progress multipart upload: Upload ID: {}, Key: {}, Initiated: {}", upload.uploadId(), upload.key(), upload.initiated()); } return uploads; } catch (S3Exception e) { logger.error("Failed to list multipart uploads: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode()); return List.of(); // Return an empty list if an exception is thrown } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 ListMultipartUploads

下列程式碼範例示範如何使用 ListObjectsV2

SDK for Java 2.x
注意

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.ListObjectsV2Request; import software.amazon.awssdk.services.s3.model.ListObjectsV2Response; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.model.S3Object; import java.nio.file.Path; import java.util.List; import java.util.stream.Collectors; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; 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.putDirectoryBucketObject; /** * Lists objects in the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @return A list of object keys in the bucket */ public static List<String> listDirectoryBucketObjectsV2(S3Client s3Client, String bucketName) { logger.info("Listing objects in bucket: {}", bucketName); try { // Create a ListObjectsV2Request ListObjectsV2Request listObjectsV2Request = ListObjectsV2Request.builder() .bucket(bucketName) .build(); // Retrieve the list of objects ListObjectsV2Response response = s3Client.listObjectsV2(listObjectsV2Request); // Extract and return the object keys return response.contents().stream() .map(S3Object::key) .collect(Collectors.toList()); } catch (S3Exception e) { logger.error("Failed to list objects: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode()); throw e; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 ListObjectsV2

下列程式碼範例示範如何使用 ListParts

SDK for Java 2.x
注意

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.ListPartsRequest; import software.amazon.awssdk.services.s3.model.ListPartsResponse; import software.amazon.awssdk.services.s3.model.Part; import software.amazon.awssdk.services.s3.model.S3Exception; import java.io.IOException; import java.nio.file.Path; import java.util.List; import static com.example.s3.util.S3DirectoryBucketUtils.abortDirectoryBucketMultipartUploads; 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.deleteDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.getFilePath; import static com.example.s3.util.S3DirectoryBucketUtils.multipartUploadForDirectoryBucket; /** * Lists the parts of a multipart upload for the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param objectKey The key (name) of the object being uploaded * @param uploadId The upload ID used to track the multipart upload * @return A list of Part representing the parts of the multipart upload */ public static List<Part> listDirectoryBucketMultipartUploadParts(S3Client s3Client, String bucketName, String objectKey, String uploadId) { logger.info("Listing parts for object: {} in bucket: {}", objectKey, bucketName); try { // Create a ListPartsRequest ListPartsRequest listPartsRequest = ListPartsRequest.builder() .bucket(bucketName) .uploadId(uploadId) .key(objectKey) .build(); // List the parts of the multipart upload ListPartsResponse response = s3Client.listParts(listPartsRequest); List<Part> parts = response.parts(); for (Part part : parts) { logger.info("Uploaded part: Part number = \"{}\", etag = {}", part.partNumber(), part.eTag()); } return parts; } catch (S3Exception e) { logger.error("Failed to list parts: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode()); return List.of(); // Return an empty list if an exception is thrown } }
  • 如需 API 詳細資訊,請參閱 AWS SDK for Java 2.x API 參考中的 ListParts

下列程式碼範例示範如何使用 PutBucketEncryption

SDK for Java 2.x
注意

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

將儲存貯體加密設定為目錄儲存貯體。

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.kms.KmsClient; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.PutBucketEncryptionRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.model.ServerSideEncryption; import software.amazon.awssdk.services.s3.model.ServerSideEncryptionByDefault; import software.amazon.awssdk.services.s3.model.ServerSideEncryptionConfiguration; import software.amazon.awssdk.services.s3.model.ServerSideEncryptionRule; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createKmsClient; import static com.example.s3.util.S3DirectoryBucketUtils.createKmsKey; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.scheduleKeyDeletion; /** * Sets the default encryption configuration for an S3 bucket as SSE-KMS. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param kmsKeyId The ID of the customer-managed KMS key */ public static void putDirectoryBucketEncryption(S3Client s3Client, String bucketName, String kmsKeyId) { // Define the default encryption configuration to use SSE-KMS. For directory // buckets, AWS managed KMS keys aren't supported. Only customer-managed keys // are supported. ServerSideEncryptionByDefault encryptionByDefault = ServerSideEncryptionByDefault.builder() .sseAlgorithm(ServerSideEncryption.AWS_KMS) .kmsMasterKeyID(kmsKeyId) .build(); // Create a server-side encryption rule to apply the default encryption // configuration. For directory buckets, the bucketKeyEnabled field is enforced // to be true. ServerSideEncryptionRule rule = ServerSideEncryptionRule.builder() .bucketKeyEnabled(true) .applyServerSideEncryptionByDefault(encryptionByDefault) .build(); // Create the server-side encryption configuration for the bucket ServerSideEncryptionConfiguration encryptionConfiguration = ServerSideEncryptionConfiguration.builder() .rules(rule) .build(); // Create the PutBucketEncryption request PutBucketEncryptionRequest putRequest = PutBucketEncryptionRequest.builder() .bucket(bucketName) .serverSideEncryptionConfiguration(encryptionConfiguration) .build(); // Set the bucket encryption try { s3Client.putBucketEncryption(putRequest); logger.info("SSE-KMS Bucket encryption configuration set for the directory bucket: {}", bucketName); } catch (S3Exception e) { logger.error("Failed to set bucket encryption: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode()); throw e; } }
  • 如需 API 詳細資訊,請參閱 AWS SDK for Java 2.x API 參考中的 PutBucketEncryption

下列程式碼範例示範如何使用 PutBucketPolicy

SDK for Java 2.x
注意

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.PutBucketPolicyRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.deleteDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.getAwsAccountId; /** * Sets the following bucket policy for the specified S3 directory bucket. *<pre> * { * "Version": "2012-10-17", * "Statement": [ * { * "Sid": "AdminPolicy", * "Effect": "Allow", * "Principal": { * "AWS": "arn:aws:iam::<ACCOUNT_ID>:root" * }, * "Action": "s3express:*", * "Resource": "arn:aws:s3express:us-west-2:<ACCOUNT_ID>:bucket/<DIR_BUCKET_NAME> * } * ] * } * </pre> * This policy grants all S3 directory bucket actions to identities in the same account as the bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param policyText The policy text to be applied */ public static void putDirectoryBucketPolicy(S3Client s3Client, String bucketName, String policyText) { logger.info("Setting policy on bucket: {}", bucketName); logger.info("Policy: {}", policyText); try { PutBucketPolicyRequest policyReq = PutBucketPolicyRequest.builder() .bucket(bucketName) .policy(policyText) .build(); s3Client.putBucketPolicy(policyReq); logger.info("Bucket policy set successfully!"); } catch (S3Exception e) { logger.error("Failed to set bucket policy: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 PutBucketPolicy

下列程式碼範例示範如何使用 PutObject

SDK for Java 2.x
注意

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

將物件放入目錄儲存貯體。

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.awscore.exception.AwsErrorDetails; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.PutObjectRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import java.io.UncheckedIOException; import java.nio.file.Path; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; 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; /** * Puts an object into the specified S3 directory bucket. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param objectKey The key (name) of the object to be placed in the bucket * @param filePath The path of the file to be uploaded */ public static void putDirectoryBucketObject(S3Client s3Client, String bucketName, String objectKey, Path filePath) { logger.info("Putting object: {} into bucket: {}", objectKey, bucketName); try { // Create a PutObjectRequest PutObjectRequest putObj = PutObjectRequest.builder() .bucket(bucketName) .key(objectKey) .build(); // Upload the object s3Client.putObject(putObj, filePath); logger.info("Successfully placed {} into bucket {}", objectKey, bucketName); } catch (UncheckedIOException e) { throw S3Exception.builder().message("Failed to read the file: " + e.getMessage()).cause(e) .awsErrorDetails(AwsErrorDetails.builder() .errorCode("ClientSideException:FailedToReadFile") .errorMessage(e.getMessage()) .build()) .build(); } catch (S3Exception e) { logger.error("Failed to put object: {}", e.getMessage(), e); throw e; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 PutObject

下列程式碼範例示範如何使用 UploadPart

SDK for Java 2.x
注意

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

上傳目錄儲存貯體的部分分段上傳。

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.core.sync.RequestBody; 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.S3Exception; import software.amazon.awssdk.services.s3.model.UploadPartRequest; import software.amazon.awssdk.services.s3.model.UploadPartResponse; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; 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.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; /** * This method creates part requests and uploads individual parts to S3. * While it uses the UploadPart API to upload a single part, it does so * sequentially to handle multiple parts of a file, returning all the completed * parts. * * @param s3Client The S3 client used to interact with S3 * @param bucketName The name of the directory bucket * @param objectKey The key (name) of the object to be uploaded * @param uploadId The upload ID used to track the multipart upload * @param filePath The path to the file to be uploaded * @return A list of uploaded parts * @throws IOException if an I/O error occurs */ public static List<CompletedPart> multipartUploadForDirectoryBucket(S3Client s3Client, String bucketName, String objectKey, String uploadId, Path filePath) throws IOException { logger.info("Uploading parts for object: {} in bucket: {}", objectKey, bucketName); int partNumber = 1; List<CompletedPart> uploadedParts = new ArrayList<>(); ByteBuffer bb = ByteBuffer.allocate(1024 * 1024 * 5); // 5 MB byte buffer // Read the local file, break down into chunks and process try (RandomAccessFile file = new RandomAccessFile(filePath.toFile(), "r")) { long fileSize = file.length(); int position = 0; // Sequentially upload parts of the file while (position < fileSize) { file.seek(position); int read = file.getChannel().read(bb); bb.flip(); // Swap position and limit before reading from the buffer UploadPartRequest uploadPartRequest = UploadPartRequest.builder() .bucket(bucketName) .key(objectKey) .uploadId(uploadId) .partNumber(partNumber) .build(); UploadPartResponse partResponse = s3Client.uploadPart( uploadPartRequest, RequestBody.fromByteBuffer(bb)); // Build the uploaded part CompletedPart uploadedPart = CompletedPart.builder() .partNumber(partNumber) .eTag(partResponse.eTag()) .build(); // Add the uploaded part to the list uploadedParts.add(uploadedPart); // Log to indicate the part upload is done logger.info("Uploaded part number: {} with ETag: {}", partNumber, partResponse.eTag()); bb.clear(); position += read; partNumber++; } } catch (S3Exception e) { logger.error("Failed to list parts: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode()); throw e; } return uploadedParts; }
  • 如需 API 詳細資訊,請參閱 AWS SDK for Java 2.x API 參考中的 UploadPart

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

SDK for Java 2.x
注意

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

案例

下列程式碼範例示範如何為 S3 目錄儲存貯體建立預先簽章的 URL 並取得物件。

SDK for Java 2.x
注意

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

產生預先簽章的 GET URL,以存取 S3 目錄儲存貯體中的物件。

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.GetObjectRequest; import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.s3.presigner.S3Presigner; import software.amazon.awssdk.services.s3.presigner.model.GetObjectPresignRequest; import software.amazon.awssdk.services.s3.presigner.model.PresignedGetObjectRequest; import java.nio.file.Path; import java.time.Duration; import static com.example.s3.util.S3DirectoryBucketUtils.createDirectoryBucket; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Client; import static com.example.s3.util.S3DirectoryBucketUtils.createS3Presigner; 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.putDirectoryBucketObject; /** * Generates a presigned URL for accessing an object in the specified S3 * directory bucket. * * @param s3Presigner The S3 presigner client used to generate the presigned URL * @param bucketName The name of the directory bucket * @param objectKey The key (name) of the object to access * @return A presigned URL for accessing the specified object */ public static String generatePresignedGetURLForDirectoryBucket(S3Presigner s3Presigner, String bucketName, String objectKey) { logger.info("Generating presigned URL for object: {} in bucket: {}", objectKey, bucketName); try { // Create a GetObjectRequest GetObjectRequest getObjectRequest = GetObjectRequest.builder() .bucket(bucketName) .key(objectKey) .build(); // Create a GetObjectPresignRequest GetObjectPresignRequest getObjectPresignRequest = GetObjectPresignRequest.builder() .signatureDuration(Duration.ofMinutes(10)) // Presigned URL valid for 10 minutes .getObjectRequest(getObjectRequest) .build(); // Generate the presigned URL PresignedGetObjectRequest presignedGetObjectRequest = s3Presigner.presignGetObject(getObjectPresignRequest); // Get the presigned URL String presignedURL = presignedGetObjectRequest.url().toString(); logger.info("Presigned URL: {}", presignedURL); return presignedURL; } catch (S3Exception e) { logger.error("Failed to generate presigned URL: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode(), e); throw e; } }
  • 如需 API 詳細資訊,請參閱《AWS SDK for Java 2.x API 參考》中的 GetObject