创建、列出和删除 Amazon S3 存储桶 - 适用于 Java 的 AWS 开发工具包
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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

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

注意

最佳实践

我们建议您在 存储桶上启用 AbortIncompleteMultipartUploadAmazon S3 生命周期规则。

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

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

注意

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

创建存储桶

使用 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 Amazon 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。