2012-03-29 2 views

Antwort

53

Wie bereits erwähnt, Amazon S3 tatsächlich Listing Keys Using the AWS SDK for .NET erfordert:

Als Eimer eine nahezu unbegrenzte Anzahl von Tasten enthalten, die vollständigen Ergebnisse einer Listenabfrage können sehr groß sein. Zur Verwaltung der großen Ergebnismengen verwendet Amazon S3 die Seitennummerierung, um sie in mehrere Antworten zu unterteilen: . Jede Listenschlüsselantwort gibt eine Seite mit bis zu 1.000 Schlüsseln mit einem Indikator zurück, der angibt, ob die Antwort abgeschnitten ist. Sie senden eine Reihe von Listenschlüsselanfragen, bis Sie alle die Schlüssel erhalten haben.

Der erwähnte Indikator ist die NextMarker Eigenschaft aus den ObjectsResponse Class - seine Nutzung ist im gesamten dargestellten Beispiel Listing Keys Using the AWS SDK for .NET, mit den entsprechenden Fragmente Wesen:

static AmazonS3 client; 
client = Amazon.AWSClientFactory.CreateAmazonS3Client(
        accessKeyID, secretAccessKeyID); 

ListObjectsRequest request = new ListObjectsRequest(); 
request.BucketName = bucketName; 
do 
{ 
    ListObjectsResponse response = client.ListObjects(request); 

    // Process response. 
    // ... 

    // If response is truncated, set the marker to get the next 
    // set of keys. 
    if (response.IsTruncated) 
    { 
     request.Marker = response.NextMarker; 
    } 
    else 
    { 
     request = null; 
    } 
} while (request != null); 
+0

über 2 Jahre später und nach wie vor die perfekte Lösung für mich! Danke :) – hardba11

+0

Perfekte Antwort ... –

+2

Ihr zweiter Link ist jetzt gebrochen (Iterating durch Multi-Page Ergebnisse), und kann stattdessen hier gefunden werden: http://docs.aws.amazon.com/AmazonS3/latest/dev/ ListingObjectKeysUsingNetSDK.html – adamdport

0

Nach der Dokumentation der Client Paginierung in dem uses Fall, den du beschreibst. Laut Dokumentation sollten Sie IsTruncated auf das Ergebnis verwenden ... wenn es true ist, rufen Sie erneut ListObjects mit der richtigen Einrichtung Marker, um die nächste Seite usw. zu erhalten - hören Sie auf, wenn IsTruncatedfalse zurückgibt.

3

Beachten Sie, dass die Antwort über die empfohlene API verwendet Objekte zur Liste: http://docs.aws.amazon.com/AmazonS3/latest/API/v2-RESTBucketGET.html

Der folgende Ausschnitt zeigt, wie es mit der neuen API aussieht:

using (var s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1)) 
{ 
    ListObjectsV2Request request = new ListObjectsV2Request 
    { 
      BucketName = bucketName, 
      MaxKeys = 10 
    }; 
    ListObjectsV2Response response; 
    do 
    { 
     response = await s3Client.ListObjectsV2Async(request); 

     // Process response. 
     // ... 

     request.ContinuationToken = response.NextContinuationToken; 

    } while (response.IsTruncated == true);   
}