2012-03-29 8 views

Odpowiedz

53

Jak już wspomniano, Amazon S3 rzeczywiście wymaga Listing Keys Using the AWS SDK for .NET:

Jak wiadra może zawierać nieograniczoną liczbę klawiszy, gdy Pełne wyniki kwerendy lista może być bardzo duża. Aby zarządzać dużymi zestawami wyników o wartości , usługa Amazon S3 używa podziału na strony, aby podzielić je na kilka odpowiedzi w postaci . Każda odpowiedź na klucze listy zwraca stronę o wartości do 1000 000 znaków ze wskaźnikiem wskazującym, czy odpowiedź jest skrócona. Wysyłasz serię żądań kluczy list, aż otrzymasz wszystkie klucze .

Wspomniany wskaźnik właściwość z ObjectsResponse ClassNextMarker - jego wykorzystanie jest przedstawione w pełnym przykład Listing Keys Using the AWS SDK for .NET z odpowiednim fragmentem jest:

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

Ponad 2 lata później i nadal idealne rozwiązanie dla mnie! Dzięki :) – hardba11

+0

Doskonała odpowiedź ... –

+2

Twój drugi link jest teraz zepsuty (Iterating Through Multi-Page Results) i można go znaleźć tutaj: http://docs.aws.amazon.com/AmazonS3/latest/dev/ ListingObjectKeysUsingNetSDK.html – adamdport

0

Zgodnie z dokumentacją klient używa paginacji w Przypadek, który opisujesz. Zgodnie z dokumentacją powinieneś użyć IsTruncated na wyniku ... jeśli jest to true zadzwoń ponownie pod numer ListObjects, aby poprawnie ustawić Marker, aby uzyskać następną stronę itd. - przestań dzwonić, gdy IsTruncated wróci false.

3

Należy pamiętać, że odpowiedź powyżej nie stosuje zalecanej API do listy obiektów: http://docs.aws.amazon.com/AmazonS3/latest/API/v2-RESTBucketGET.html

Poniższy fragment kodu pokazuje, jak to wygląda z nowym API:

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