2012-03-29 31 views

risposta

53

Come dichiarato già, Amazon S3 richiede infatti Listing Keys Using the AWS SDK for .NET:

Come secchi possono contenere un numero virtualmente illimitato di chiavi, i risultati completi di una query lista può essere molto grande. Per gestire i set di risultati grandi , Amazon S3 utilizza l'impaginazione per dividerli in risposte multiple. Ogni risposta di tasti di elenco restituisce una pagina fino a 1.000 chiavi con un indicatore che indica se la risposta viene troncata. Si inviano una serie di richieste delle chiavi di elenco finché non si ricevono tutte le chiavi .

L'indicatore menzionato è la proprietà NextMarker dal ObjectsResponse Class - il suo utilizzo è illustrato nell'esempio completo Listing Keys Using the AWS SDK for .NET, con il relativo benessere frammento:

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

Oltre 2 anni più tardi e ancora il soluzione perfetta per me! Grazie :) – hardba11

+0

Risposta perfetta ... –

+2

Il tuo secondo link è rotto ora (Iterating Through Multi-Page Results), e può essere trovato qui invece: http://docs.aws.amazon.com/AmazonS3/latest/dev/ ListingObjectKeysUsingNetSDK.html – adamdport

0

Secondo la documentazione il client utilizza la paginazione in caso che descrivi. Come da documentazione, è necessario utilizzare IsTruncated sul risultato ... se è chiamare ListObjects di nuovo con l'installazione corretta Marker per ottenere la pagina successiva ecc. - interrompere la chiamata quando IsTruncated restituisce false.

3

Essere consapevoli del fatto che la risposta di cui sopra non utilizza l'API consigliata to List oggetti: http://docs.aws.amazon.com/AmazonS3/latest/API/v2-RESTBucketGET.html

Il seguente frammento di codice mostra come appare con la nuova 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);   
} 
Problemi correlati