创建、列出和删除 Amazon S3 桶 - 适用于 Java 的 Amazon SDK 1.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

适用于 Java 的 Amazon SDK 1.x 版本自 2024 年 7 月 31 日起已进入维护模式,并将于 2025 年 12 月 31 日终止支持。我们建议您迁移到 Amazon SDK for Java 2.x 以继续获得新功能、可用性改进和安全更新。

创建、列出和删除 Amazon S3 桶

Amazon S3 中的每个对象(文件)必须放入存储桶,它代表对象的集合(容器)。每个存储桶使用必须唯一的 (名称) 命名。有关桶及其配置的详细信息,请参阅《Amazon Simple Storage Service 用户指南》中的使用 Amazon S3 桶

注意

最佳实践

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

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

有关更多信息,请参阅《Amazon S3 用户指南》中的使用版本控制的桶生命周期配置

注意

这些代码示例假定您了解使用适用于 Java 的 Amazon SDK 中的内容,并且已使用设置用于开发的 Amazon 凭证和区域中的信息配置默认 Amazon 凭证。

创建存储桶

使用 AmazonS3 客户端的 createBucket 方法。会返回新的存储桶。如果存储桶已存在,createBucket 方法将引发异常。

注意

要尝试创建一个具有相同名称的存储桶来检查存储桶是否已存在,请调用 doesBucketExist 方法。如果存储桶存在,它将返回 true,否则将返回 false

导入

import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AmazonS3Exception; import com.amazonaws.services.s3.model.Bucket; import java.util.List;

代码

if (s3.doesBucketExistV2(bucket_name)) { System.out.format("Bucket %s already exists.\n", bucket_name); b = getBucket(bucket_name); } else { try { b = s3.createBucket(bucket_name); } catch (AmazonS3Exception e) { System.err.println(e.getErrorMessage()); } } return b;

请参阅 GitHub 上的完整示例

列出存储桶

使用 AmazonS3 客户端的 listBucket 方法。如果成功,会返回存储桶的列表。

导入

import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.Bucket; import java.util.List;

代码

List<Bucket> buckets = s3.listBuckets(); System.out.println("Your {S3} buckets are:"); for (Bucket b : buckets) { System.out.println("* " + b.getName()); }

请参阅 GitHub 上的完整示例

删除存储桶

在删除 Amazon S3 存储桶前,必须先确保存储桶为空,否则会导致错误。如果您的存储桶受版本控制,则必须同时删除与该存储桶关联的所有受版本控制对象。

注意

完整示例中依次包含上述每个步骤,提供用于删除 Amazon S3 存储桶及其内容的完整解决方案。

删除不受版本控制的存储桶之前先删除其中的对象

使用 AmazonS3 客户端的 listObjects 方法来检索对象列表,并使用 deleteObject 删除每个对象。

导入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.*; import java.util.Iterator;

代码

System.out.println(" - removing objects from bucket"); ObjectListing object_listing = s3.listObjects(bucket_name); while (true) { for (Iterator<?> iterator = object_listing.getObjectSummaries().iterator(); iterator.hasNext(); ) { S3ObjectSummary summary = (S3ObjectSummary) iterator.next(); s3.deleteObject(bucket_name, summary.getKey()); } // more object_listing to retrieve? if (object_listing.isTruncated()) { object_listing = s3.listNextBatchOfObjects(object_listing); } else { break; } }

请参阅 GitHub 上的完整示例

删除受版本控制的存储桶之前先删除其中的对象

如果您使用受版本控制的存储桶,还需要先删除存储桶中存储的所有受版本控制对象,然后才能删除存储桶。

使用在删除桶中的对象时所用的类似方法,通过使用 AmazonS3 客户端的 listVersions 方法列出所有受版本控制的对象,然后使用 deleteVersion 删除各个对象。

导入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.*; import java.util.Iterator;

代码

System.out.println(" - removing versions from bucket"); VersionListing version_listing = s3.listVersions( new ListVersionsRequest().withBucketName(bucket_name)); while (true) { for (Iterator<?> iterator = version_listing.getVersionSummaries().iterator(); iterator.hasNext(); ) { S3VersionSummary vs = (S3VersionSummary) iterator.next(); s3.deleteVersion( bucket_name, vs.getKey(), vs.getVersionId()); } if (version_listing.isTruncated()) { version_listing = s3.listNextBatchOfVersions( version_listing); } else { break; } }

请参阅 GitHub 上的完整示例

删除空存储桶

在删除桶中的对象(包括所有受版本控制的对象)后,就可以使用 AmazonS3 客户端的 deleteBucket 方法删除桶本身。

导入

import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.*; import java.util.Iterator;

代码

System.out.println(" OK, bucket ready to delete!"); s3.deleteBucket(bucket_name);

请参阅 GitHub 上的完整示例