列出已啟用版本控制之儲存貯體中的物件 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

列出已啟用版本控制之儲存貯體中的物件

本節提供列出已啟用版本控制之儲存貯體中物件版本的範例。Amazon S3 會將物件版本資訊存放至與儲存貯體有關聯的 versions 子資源。如需詳細資訊,請參閱儲存貯體組態選項。若要列出已啟用版本控制之儲存貯體,您需要 ListBucketVersions 許可。

請依照下列步驟使用 Amazon S3 主控台查看某個物件的不同版本。

查看物件的多個版本
  1. 登入 AWS Management Console 並在 Word 開啟 Amazon S3 主控台。 https://console.aws.amazon.com/s3/

  2. Buckets (儲存貯體) 清單中,選擇包含該物件的儲存貯體名稱。

  3. 若要查看儲存貯體中的物件版本清單,請選擇 Show versions (顯示版本) 切換開關。

    針對每個物件版本,主控台會顯示唯一版本 ID、物件版本建立日期與時間,以及其他屬性。(設定版本控制狀態之前儲存貯體中所存放的物件會有 null 的版本 ID。)

    若只要列出物件而不顯示版本,請選擇 List versions (列出版本) 切換開關。

您也可以在主控台的物件概觀面板中檢視、下載及刪除物件版本。如需詳細資訊,請參閱在 Amazon S3 主控台中檢視物件屬性

注意

若要存取超過 300 個版本的物件版本,您必須使用 AWS CLI 或物件的 URL。

重要

只有在刪除最新版 (目前版本) 的物件時,才能取消刪除物件。您無法取消刪除已刪除的舊版物件。如需詳細資訊,請參閱使用 S3 版本控制保留多個版本的物件

本節中的範例會示範如何從已啟用版本控制之儲存貯體中,擷取物件清單。除非您指定較小的數值,否則每個請求最多可回傳 1,000 個版本。如果儲存貯體含有比限制數量更多的版本,則您需要傳送一連串可擷取所有版本清單的要求。在「頁面」中傳回結果的過程稱為分頁

為了解說分頁運作方式,這些範例會限制每一個物件版本的回應。在擷取結果的第一頁,每個範例都會檢查以確定是否截斷了版本清單。如果是,則該範例則會繼續擷取頁面,直到擷取到所有版本。

注意

以下範例還適用於尚未啟用版本控制的儲存貯體,或者尚沒有獨立版本的物件。在這些情況下,Amazon S3 會傳回版本 ID 為 null 的物件清單。

如需使用 other AWS SDKs 的相關資訊,請參閱AWS 開發人員中心

Java

如需建立和測試工作範例的說明,請參閱 AWS SDK for Java 開發人員指南中的入門

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListVersionsRequest; import com.amazonaws.services.s3.model.S3VersionSummary; import com.amazonaws.services.s3.model.VersionListing; public class ListKeysVersioningEnabledBucket { public static void main(String[] args) { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Retrieve the list of versions. If the bucket contains more versions // than the specified maximum number of results, Amazon S3 returns // one page of results per request. ListVersionsRequest request = new ListVersionsRequest() .withBucketName(bucketName) .withMaxResults(2); VersionListing versionListing = s3Client.listVersions(request); int numVersions = 0, numPages = 0; while (true) { numPages++; for (S3VersionSummary objectSummary : versionListing.getVersionSummaries()) { System.out.printf("Retrieved object %s, version %s\n", objectSummary.getKey(), objectSummary.getVersionId()); numVersions++; } // Check whether there are more pages of versions to retrieve. If // there are, retrieve them. Otherwise, exit the loop. if (versionListing.isTruncated()) { versionListing = s3Client.listNextBatchOfVersions(versionListing); } else { break; } } System.out.println(numVersions + " object versions retrieved in " + numPages + " pages"); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET

如需有關設定和執行程式碼範例的資訊,請參閱 AWS SDK for .NET 中的 Word for .Word 入門 AWS SDK NET 開發人員指南

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class ListObjectsVersioningEnabledBucketTest { static string bucketName = "*** bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main(string[] args) { s3Client = new AmazonS3Client(bucketRegion); GetObjectListWithAllVersionsAsync().Wait(); } static async Task GetObjectListWithAllVersionsAsync() { try { ListVersionsRequest request = new ListVersionsRequest() { BucketName = bucketName, // You can optionally specify key name prefix in the request // if you want list of object versions of a specific object. // For this example we limit response to return list of 2 versions. MaxKeys = 2 }; do { ListVersionsResponse response = await s3Client.ListVersionsAsync(request); // Process response. foreach (S3ObjectVersion entry in response.Versions) { Console.WriteLine("key = {0} size = {1}", entry.Key, entry.Size); } // If response is truncated, set the marker to get the next // set of keys. if (response.IsTruncated) { request.KeyMarker = response.NextKeyMarker; request.VersionIdMarker = response.NextVersionIdMarker; } else { request = null; } } while (request != null); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } } }
範例 — 列出儲存貯體中的所有物件版本

若要列出儲存貯體中物件的所有版本,請在 versions 要求中使用 GET Bucket 子資源。Amazon S3 最多能擷取 1,000 個物件,每個物件版本完全算為一個物件。因此,如果儲存貯體包含兩個金鑰 (例如,photo.gifpicture.jpg),而且第一個金鑰有 990 個版本,第二個金鑰有 400 個版本,單一要求將會擷取 photo.gif 的全部 990 個版本,並且只會擷取 picture.jpg 的最新 10 個版本。

Amazon S3 會依存放順序來傳回物件版本,而最近存放的物件會先傳回。

GET Bucket 要求中,包含 versions 子資源。

GET /?versions HTTP/1.1 Host: bucketName.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 +0000 Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
範例 — 擷取索引鍵的所有版本

若要擷取物件版本子集,您可以使用 GET Bucket 的請求參數。如需詳細資訊,請參閱 GET Bucket.

  1. prefix 參數設為您想要擷取之物件的索引鍵。

  2. 使用 GET Bucket 子資源與 versions 來傳送 prefix 要求。

    GET /?versions&prefix=objectName HTTP/1.1

範例 — 使用字首擷取物件

下列範例會擷取其金鑰或開頭為 myObject 的物件。

GET /?versions&prefix=myObject HTTP/1.1 Host: bucket.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

您可以使用其他要求參數來擷取物件之所有版本的子集。如需詳細資訊,請參閱 GET BucketAmazon Simple Storage Service API 參考中。

範例 — 在截斷回應時擷取其他物件清單

如果可在 GET 要求中傳回的物件數目超過 max-keys 的值,則回應會包含 <isTruncated>true</isTruncated>,並包含滿足要求但未傳回的第一個金鑰 (在 NextKeyMarker 中) 與第一個版本 ID (在 NextVersionIdMarker 中)。您可以使用這些傳回的值作為後續要求中的開始位置,以擷取可滿足 GET 要求的其他物件。

使用下列程序可從儲存貯體中擷取可滿足原始 GET Bucket versions 要求的其他物件。如需 key-markerversion-id-markerNextKeyMarker和 的詳細資訊NextVersionIdMarker,請參閱 GET BucketAmazon Simple Storage Service API 參考中。

以下是滿足原始 GET 請求的其他回應:

  • key-marker 的值設為前一個回應的 NextKeyMarker 中所傳回的金鑰。

  • version-id-marker 的值設為前一個回應的 NextVersionIdMarker 中所傳回的版本 ID。

  • 使用 GET Bucket versionskey-marker 來傳送 version-id-marker 要求。

範例 — 擷取開頭為所指定索引鍵與版本 ID 的物件
GET /?versions&key-marker=myObject&version-id-marker=298459348571 HTTP/1.1 Host: bucket.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

以下命令會傳回有關儲存貯體中所有版本的物件的中繼資料。

aws s3api list-object-versions --bucket amzn-s3-demo-bucket1

如需詳細資訊,list-object-versions請參閱 list-object-versionsAWS CLI 命令參考 中。