2012-03-29 18 views

Respuesta

53

como se ha dicho ya, de hecho, requiere Amazon S3Listing Keys Using the AWS SDK for .NET:

Como cubos pueden contener un número virtualmente ilimitado de llaves, los resultados completos de una consulta de la lista pueden ser extremadamente grandes. Para administrar grandes conjuntos de resultados, Amazon S3 utiliza la paginación para dividirlos en respuestas múltiples. Cada respuesta de las teclas de lista devuelve una página de hasta 1,000 teclas con un indicador que indica si la respuesta está truncada. Envía una serie de solicitudes de claves de lista hasta que haya recibido todas las claves .

El indicador mencionado es la propiedad NextMarker de la ObjectsResponse Class - su uso se ilustra en el ejemplo completo Listing Keys Using the AWS SDK for .NET, con el ser fragmento relevante:

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

más de 2 años más tarde y sigue siendo el la solución perfecta para mí! Gracias :) – hardba11

+0

Respuesta perfecta ... –

+2

Su segundo enlace está roto ahora (iterando a través de resultados de varias páginas), y se puede encontrar aquí en su lugar: http://docs.aws.amazon.com/AmazonS3/latest/dev/ ListingObjectKeysUsingNetSDK.html – adamdport

0

Según la documentación el cliente utiliza la paginación en el caso que describes Según la documentación, debe usar IsTruncated en el resultado ... si es true llame de nuevo al ListObjects con la configuración correcta Marker para obtener la siguiente página, etc. - deje de llamar cuando IsTruncated devuelva false.

3

Tenga en cuenta que la respuesta anterior no está utilizando la API recomendada a la lista Objetos: http://docs.aws.amazon.com/AmazonS3/latest/API/v2-RESTBucketGET.html

El siguiente ejemplo muestra como se ve con la nueva 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);   
} 
Cuestiones relacionadas