创建、列出和删除 Amazon S3 桶 - AWS SDK for Java 1.x

自2024年7月31日起, AWS SDK for Java 1.x已进入维护模式,并将于2025年12月31日end-of-support上线。我们建议您迁移到AWS SDK for Java 2.x以继续接收新功能、可用性改进和安全更新。

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

创建、列出和删除 Amazon S3 桶

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

注意

最佳实践

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

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

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

注意

这些代码示例假定您了解使用AWS SDK for Java 中的内容,并且已使用设置用于开发的 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 {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 上的完整示例