创建、列出和删除Amazon S3存储桶 - AWS SDK for Java

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

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

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

注意

最佳实践

建议您对 存储桶启用 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 上的完整示例