Auflisten von Objekten in einem versionsfähigen Bucket - Amazon Simple Storage Service

Dieses Handbuch wird nicht mehr aktualisiert. Aktuelle Informationen und Anweisungen finden Sie im neuen Amazon S3-Benutzerhandbuch.

Auflisten von Objekten in einem versionsfähigen Bucket

Dieser Abschnitt zeigt ein Beispiel, wie Objektversionen aus einem versionsfähigen Bucket aufgelistet werden. Amazon S3 speichert Versionsinformationen zu Objekten in der versions-Subressource (siehe Optionen für die Bucket-Konfiguration), die dem Bucket zugeordnet ist.

Verwenden der Konsole

Informationen zum Auflisten von Testversionen mit der Amazon S3-Konsole finden Sie unter Wie sehe ich die Versionen eines S3-Objekts? im Benutzerhandbuch für die Amazon Simple Storage Service Console.

Verwenden der AWS SDKs

Die Beispiele in diesem Abschnitt veranschaulichen, wie Sie eine Objektliste aus einem versionsfähigen Bucket abrufen. Jede Anforderung gibt bis zu 1000 Versionen zurück, sofern Sie keine kleinere Anzahl festlegen. Wenn die Versionen im Bucket dieses Limit überschreiten, senden Sie eine Reihe von Anforderungen, um die Liste aller Versionen abzurufen. Dieser Vorgang zur „seitenweisen“ Rückgabe von Ergebnissen wird als Paginierung bezeichnet. Um zu veranschaulichen, wie Paginierung funktioniert, limitieren die Beispiele jede Antwort auf zwei Objektversionen. Nachdem die erste Seite mit Ergebnissen abgerufen wurde, wird in jedem Beispiel überprüft, ob die Versionsliste abgeschnitten wurde. Wurde sie abgeschnitten, dann wird im Beispiel mit dem seitenweisen Abruf fortgefahren, bis alle Versionen abgerufen wurden.

Anmerkung

Die folgenden Beispiele funktionieren auch bei einem Bucket, der versionsfähig ist, oder bei Objekten ohne individuelle Versionen. In solchen Fällen gibt Amazon S3 die Objektliste mit der Versions-ID null zurück.

Weitere Informationen zur Verwendung anderer AWS SDKs finden Sie unter Beispiel-Code und Bibliotheken.

Using the AWS SDK for Java

Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Testen der Java-Codebeispiele für Amazon S3.

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

Using the AWS SDK for .NET

Weitere Informationen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Ausführen der .NET-Codebeispiele für Amazon S3.

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

Verwenden der REST API

Um alle Versionen aller Objekte in einem Bucket aufzulisten, verwenden Sie die versions-Subressource in einer GET Bucket-Anfrage. Amazon S3 kann maximal 1000 Objekte abrufen. Jede Objektversion zählt als vollständiges Objekt. Wenn ein Bucket also zwei Schlüssel enthält (z. B. photo.gif und picture.jpg) und der erste Schlüssel 990 Versionen und der zweite Schlüssel 400 Versionen hat, ruft eine einzelne Abfrage alle 990 Versionen von photo.gif und nur die 10 neuesten Versionen von picture.jpg ab.

Amazon S3 gibt Objektversionen in der Reihenfolge zurück, in der sie gespeichert wurden, wobei die zuletzt gespeicherte zuerst zurückgegeben wird.

Alle Objektversionen in einem Bucket auflisten

  • Geben Sie in einer GET Bucket-Anforderung die versions-Subressource an.

    GET /?versions HTTP/1.1 Host: bucketName.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 +0000 Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

Abrufen einer Untermenge von Objekten in einem Bucket

Dieser Abschnitt beschreibt die beiden folgenden Beispielszenarien:

  • Sie wollen eine Untermenge aller Objektversionen in einem Bucket abrufen, z. B. alle Versionen eines bestimmten Objekts.

  • Die Anzahl der Objektversionen in der Antwort überschreitet den Wert für max-key (standardmäßig 1000), sodass Sie eine zweite Anforderung senden müssen, um die restlichen Objektversionen abzurufen.

Um eine Untermenge von Objektversionen abzurufen, verwenden Sie die Anforderungsparameter für GET Bucket. Weitere Informationen finden Sie unter GET Bucket.

Beispiel 1: Abrufen aller Versionen eines spezifischen Objekts

Sie können mit der versions-Subressource und dem prefix-Anforderungparameter unter Verwendung des folgenden Prozesses alle Versionen eines Objekts abrufen. Weitere Informationen zu prefix finden Sie unter GET Bucket.

1 Setzen Sie den Parameter prefix auf den Schlüssel des Objekts, das Sie abrufen wollen.
2

Senden Sie eine GET Bucket-Anforderung unter Verwendung der versions-Subressource und prefix.

GET /?versions&prefix=objectName HTTP/1.1

Beispiel Abrufen von Objekten unter Verwendung eines Präfix

Das folgende Beispiel ruft Objekte ab, deren Schlüssel myObject ist oder damit beginnt.

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=

Sie können die anderen Anforderungsparameter verwenden, um eine Untermenge aller Versionen des Objekts abzurufen. Weitere Informationen finden Sie unter GET Bucket.

Beispiel 2: Abrufen einer Liste zusätzlicher Objekte, falls die Antwort gekürzt wurde

Wenn die Anzahl der Objekte, die in einer GET-Anforderung zurückgegeben werden können, den Wert max-keys überschreitet, enthält die Antwort <isTruncated>true</isTruncated>, ebenso wie den ersten Schlüssel (in NextKeyMarker) und die erste Versions-ID (in NextVersionIdMarker), die die Anforderungskriterien erfüllen, aber nicht zurückgegeben wurden. Diese zurückgegebenen Werte verwenden Sie als Ausgangspunkt in einer nachfolgenden Anforderung, um die zusätzlichen Objekte abzurufen, die die GET-Anforderung erfüllen.

Gehen Sie wie folgt vor, um zusätzlichen Objekte abzurufen, die die ursprüngliche GET Bucket versions-Anforderung von einem Bucket erfüllen. Weitere Informationen zu key-marker, version-id-marker, NextKeyMarker und NextVersionIdMarker finden Sie unter GET Bucket.

1 Setzen Sie den Wert von key-marker auf den Schlüssel, der in NextKeyMarker in der vorherigen Antwort zurückgegeben wurde.
2 Setzen Sie den Wert von version-id-marker auf die Versions-ID, die in NextVersionIdMarker in der vorherigen Antwort zurückgegeben wurde.
3 Senden Sie eine GET Bucket versions-Anforderung mit key-marker und version-id-marker.

Beispiel Abrufen von Objekten ab einem bestimmten Schlüssel und einer bestimmten Versions-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=