Saltar al contenido

Cómo listar todos los objetos de AWS S3 en un depósito usando Java

Indagamos en el mundo on line para así mostrarte la solución para tu dilema, si tienes alguna inquietud deja tu comentario y te contestamos sin falta, porque estamos para ayudarte.

Solución:

Podría ser una solución, pero esto resolvió mi problema:

ObjectListing listing = s3.listObjects( bucketName, prefix );
List summaries = listing.getObjectSummaries();

while (listing.isTruncated()) 
   listing = s3.listNextBatchOfObjects (listing);
   summaries.addAll (listing.getObjectSummaries());

Para aquellos que están leyendo esto en 2018+. Hay dos nuevas API sin problemas de paginación disponibles: una en AWS SDK para Java 1.x y otra en 2.x.

1.x

Hay una nueva API en Java SDK que le permite iterar a través de objetos en el depósito S3 sin tener que lidiar con la paginación:

AmazonS3 s3 = AmazonS3ClientBuilder.standard().build();

S3Objects.inBucket(s3, "the-bucket").forEach((S3ObjectSummary objectSummary) -> 
    // TODO: Consume `objectSummary` the way you need
    System.out.println(objectSummary.key);
);

Esta iteración es perezosa:

La lista de S3ObjectSummaryLos correos electrónicos se obtendrán de forma perezosa, una página a la vez, a medida que se necesiten. El tamaño de la página se puede controlar con el withBatchSize(int) método.

2.x

La API cambió, así que aquí hay una versión SDK 2.x:

S3Client client = S3Client.builder().region(Region.US_EAST_1).build();
ListObjectsV2Request request = ListObjectsV2Request.builder().bucket("the-bucket").prefix("the-prefix").build();
ListObjectsV2Iterable response = client.listObjectsV2Paginator(request);

for (ListObjectsV2Response page : response) 
    page.contents().forEach((S3Object object) -> 
        // TODO: Consume `object` the way you need
        System.out.println(object.key());
    );

ListObjectsV2Iterable es perezoso también:

Cuando se llama a la operación, se devuelve una instancia de esta clase. En este punto, todavía no se realizan llamadas de servicio, por lo que no hay garantía de que la solicitud sea válida. A medida que itera a través del iterable, el SDK comenzará a cargar lentamente las páginas de respuesta haciendo llamadas de servicio hasta que no queden páginas o la iteración se detenga. Si hay errores en su solicitud, verá las fallas solo después de comenzar a iterar a través del iterable.

Esto es directo de la documentación de AWS:

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());        

ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
    .withBucketName(bucketName)
    .withPrefix("m");
ObjectListing objectListing;

do 
        objectListing = s3client.listObjects(listObjectsRequest);
        for (S3ObjectSummary objectSummary : 
            objectListing.getObjectSummaries()) 
            System.out.println( " - " + objectSummary.getKey() + "  " +
                    "(size = " + objectSummary.getSize() + 
                    ")");
        
        listObjectsRequest.setMarker(objectListing.getNextMarker());
 while (objectListing.isTruncated());

Ten en cuenta mostrar este enunciado si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *