La API de Java de Amazon S3 solo descarga 50 objetos

Esto me estaba causando un gran dolor de cabeza, así que pensé en publicar la solución fácil. Mi problema era que cuando usaba la API de Java para el S3 de Amazon, solo podía descargar 50 objetos antes de que se agotara misteriosamente. El código se parecía a esto:

int counter = 0;
AmazonS3Client s3 = new AmazonS3Client(propertiesFile);
while(objectList.isTruncated()){
for(S3ObjectSummary objectSummary : objectList.getObjectSummaries()){
    System.out.println(++counter);
    S3Object object = s3.getObject(new GetObjectRequest(bucketName, objectSummary.getKey()));
//do stuff
}
}

Funcionaría y procesaría todo bien para exactamente 50 objetos, y luego expiraría.

Respuesta 1

Por alguna razón, el problema principal es que había declarado s3 como AmazonS3Client s3. Debería haberse visto así:

AmazonS3 s3 = new AmazonS3Client(propertiesFile);

Por si alguien más se encuentra con este problema.

Respuesta: 2

Con suerte, aunque puede llamar a getObject para descargarlo, no está cerrando InputStream. que es opcional llamando a getObject (); tienes que cerrar InputStream después de tratar con cada objeto.

más detalles léalo: http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#getObject(com.amazonaws.services.s3.model.GetObjectRequest )

Gracias

Respuesta: 3

En mi aplicación obtengo contenido JSON como InputStream. Dependiendo de si se trata de un solo JSONObject o un JSONArray de los que quiero realizar diferentes acciones. ¿Cómo puedo diferenciar, usando Jackson, si es un ...

Necesito programar algunos trabajos periódicos y he encontrado un obstáculo con Quartz. Por ejemplo: no creo que esto sea posible con Quartz (con una sola expresión / trabajo): ejecute un trabajo todos los días entre ...

Estoy usando Pentaho Kettle 4.0.1. Ahora ejecuto una transformación desde Java proporcionando un archivo de transformación (tipo XML no KTR) y proporciono algunos otros archivos XML (en una carpeta src) que deben insertarse ...

Tengo tres clases de objetos: public class Section {private Integer id; Lista privada <Program> programas; } programa de clase pública {título de cadena privada; ID de entero privado; ...