截至 2024 年 7 月 31 日, AWS SDK for Java 1.x 已進入維護模式,並將在 2025 年 12 月 31 日送達 end-of-support
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
創建、列出和刪除Amazon S3儲存貯體
中的每個物件 (檔案)Amazon S3必須位於桶,它代表物件集合(容器)。每個存儲桶都由鍵(名稱),必須是唯一的。如需儲存貯體及其配置的詳細資訊,請參使用Amazon S3儲存貯體中的Amazon Simple Storage Service使用者指南。
注意
最佳實務
我們建議您在 儲存貯體上啟用 AbortIncompleteMultipartUploadAmazon S3 生命週期規則。
此規則指示 Amazon S3 中止啟動後未在指定天數內完成的分段上傳。超過設定的時間限制時,Amazon S3 會中止上傳,然後刪除未完成的上傳資料。
如需詳細資訊,請參閱「」具版本控制的儲存貯體的生命週期組態中的Amazon S3使用者指南。
注意
這些代碼示例假定您理解使用AWS SDK for Java並配置了默認AWS憑據使用設定AWS全權證書和區域促進發展。
建立儲存貯體
使用卓越亞馬遜客户端的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;
Code
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 上的完整範例
列出儲存貯體
使用卓越亞馬遜客户端的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;
Code
List<Bucket> buckets = s3.listBuckets(); System.out.println("Your {S3} buckets are:"); for (Bucket b : buckets) { System.out.println("* " + b.getName()); }
請參閱 GitHub 上的完整範例
刪除儲存貯體
刪除Amazon S3儲存貯體之後,您必須先確保儲存貯體是空的,否則會傳回錯誤。如果您有版本化存儲桶,則必須刪除與儲存貯體相關聯的任何版本控制物件。
注意
所以此完整範例
從未版本控制的存儲桶中刪除對象,然後再刪除對象
使用卓越亞馬遜客户端的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;
Code
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;
Code
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;
Code
System.out.println(" OK, bucket ready to delete!"); s3.deleteBucket(bucket_name);
請參閱 GitHub 上的完整範例