适用于 Java 的 AWS 开发工具包
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

创建、列出和删除 Amazon S3 存储桶

重要

这是一个预览版,不建议用于生产环境。

Amazon S3 中的每个对象(文件)必须位于存储桶 中。存储桶表示对象的集合(容器)。每个存储桶必须具有一个唯一(名称)。有关存储桶及其配置的详细信息,请参阅 Amazon S3 Developer Guide 中的使用 Amazon S3 存储桶

注意

最佳实践

建议您对 Amazon S3 存储桶启用 AbortIncompleteMultipartUpload 生命周期规则。

该规则指示 Amazon S3 中止在启动后没有在指定天数内完成的分段上传。当超过设置的时间限制时,Amazon S3 将中止上传,然后删除未完成的上传数据。

有关更多信息,请参阅 Amazon S3 User Guide 中的使用版本控制的存储桶的生命周期配置

注意

这些代码段假定您了解使用适用于 Java 的 AWS 开发工具包 2.0 开发人员预览中的内容,并且已使用设置用于开发的 AWS 凭证和区域中的信息配置默认 AWS 凭证。

创建存储桶

构建 CreateBucketRequest 并提供存储桶名称。将其传递到 S3ClientcreateBucket 方法。使用 S3Client 执行其他操作(例如列出或删除存储桶),如后面的示例中所示。

导入

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CreateBucketConfiguration; import software.amazon.awssdk.services.s3.model.CreateBucketRequest;

代码

Region region = Region.US_WEST_2; S3Client s3 = S3Client.builder().region(region).build(); String bucket = "bucket" + System.currentTimeMillis(); CreateBucketRequest createBucketRequest = CreateBucketRequest .builder() .bucket(bucket) .createBucketConfiguration(CreateBucketConfiguration.builder() .locationConstraint(region.value()) .build()) .build(); s3.createBucket(createBucketRequest);

请参阅 GitHub 上的完整示例

列出存储桶

构建 ListBucketRequest。使用 S3ClientlistBuckets 方法检索存储桶列表。如果请求成功,将返回 ListBucketsResponse。使用此响应对象可检索存储桶列表。

导入

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CreateBucketConfiguration; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.model.ListBucketsRequest; import software.amazon.awssdk.services.s3.model.ListBucketsResponse;

代码

Region region = Region.US_WEST_2; S3Client s3 = S3Client.builder().region(region).build(); // List buckets ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder().build(); ListBucketsResponse listBucketsResponse = s3.listBuckets(listBucketsRequest); listBucketsResponse.buckets().stream().forEach(x -> System.out.println(x.name()));

请参阅 GitHub 上的完整示例

删除存储桶

在删除 Amazon S3 存储桶前,必须先确保存储桶为空,否则该服务将返回错误。如果您的存储桶受版本控制,则必须同时删除位于存储桶中的所有受版本控制对象。

删除存储桶中的对象

构建 ListObjectsV2Request 并使用 S3ClientlistObjects 方法检索存储桶中的对象的列表。然后,在每个对象上使用 deleteObject 方法以删除它。

导入

import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CreateBucketConfiguration; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest; import software.amazon.awssdk.services.s3.model.DeleteObjectRequest; import software.amazon.awssdk.services.s3.model.ListObjectsV2Request; import software.amazon.awssdk.services.s3.model.ListObjectsV2Response;

代码

ListObjectsV2Request listObjectsV2Request = ListObjectsV2Request.builder().bucket(bucket2).build(); ListObjectsV2Response listObjectsV2Response; do { listObjectsV2Response = s3.listObjectsV2(listObjectsV2Request); for (S3Object s3Object : listObjectsV2Response.contents()) { s3.deleteObject(DeleteObjectRequest.builder().bucket(bucket2).key(s3Object.key()).build()); } listObjectsV2Request = ListObjectsV2Request.builder().bucket(bucket2) .continuationToken(listObjectsV2Response.nextContinuationToken()) .build(); } while (listObjectsV2Response.isTruncated());

请参阅 GitHub 上的完整示例

删除空存储桶

使用存储桶名称构建 DeleteBucketRequest 并将其传递到 S3ClientdeleteBucket 方法。

导入

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.CreateBucketConfiguration; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.DeleteBucketRequest;

代码

Region region = Region.US_WEST_2; S3Client s3 = S3Client.builder().region(region).build(); DeleteBucketRequest deleteBucketRequest = DeleteBucketRequest.builder().bucket(bucket).build(); s3.deleteBucket(deleteBucketRequest);

请参阅 GitHub 上的完整示例