創建、列出和刪除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 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儲存貯體之後,您必須先確保儲存貯體是空的,否則會傳回錯誤。如果您有版本化存儲桶,則必須刪除與儲存貯體相關聯的任何版本控制物件。

注意

所以此完整範例按順序包含這些步驟中的每個步驟,提供了一個完整的解決方案來刪除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 上的完整範例