自2024年7月31日起, AWS SDK for Java 1.x已进入维护模式,并将于2025年12月31日end-of-support
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建、列出和删除 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 存储桶前,必须先确保存储桶为空,否则会导致错误。如果您的存储桶受版本控制,则必须同时删除与该存储桶关联的所有受版本控制对象。
注意
完整示例
删除不受版本控制的存储桶之前先删除其中的对象
使用 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 上的完整示例