選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

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

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

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

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

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

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

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

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

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

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

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

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

注意

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

重要

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

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

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

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

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

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

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

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

注意

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

重要

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

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

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

注意

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

如需使用 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

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

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); } } } }

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

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

注意

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

如需使用 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

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

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); } } } }

如需建立和測試工作範例的說明,請參閱《 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(); } } }
範例 — 列出儲存貯體中的所有物件版本

若要列出儲存貯體中物件的所有版本,請在 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=

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

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

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

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

以下是滿足原始 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=

範例 — 列出儲存貯體中的所有物件版本

若要列出儲存貯體中物件的所有版本,請在 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=

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

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

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

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

以下是滿足原始 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 的詳細資訊,請參閱《AWS CLI 命令參考》中的 list-object-versions

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

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

如需 list-object-versions 的詳細資訊,請參閱《AWS CLI 命令參考》中的 list-object-versions

下一個主題:

擷取物件版本

上一個主題:

新增物件
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。