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
S3ObjectSummary
Los 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 elwithBatchSize(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.