Tengo una aplicación que funciona mucho en S3, principalmente descargando archivos desde él. Estoy viendo muchos de estos tipos de errores y me gustaría saber si esto es algo en mi código o si el servicio no es confiable como este.El cliente S3 Java falla mucho con el "cuerpo del mensaje delimitado por el final prematuro del contenido" o "el socket cerrado por java.net.SocketException"
El código que estoy usando para leer de la corriente objeto S3 es el siguiente:
public static final void write(InputStream stream, OutputStream output) {
byte[] buffer = new byte[1024];
int read = -1;
try {
while ((read = stream.read(buffer)) != -1) {
output.write(buffer, 0, read);
}
stream.close();
output.flush();
output.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Este OutputStream es una nueva BufferedOutputStream (nueva FileOutputStream (archivo)). Estoy utilizando la última versión del cliente Amazon S3 Java y esta llamada se reintenta cuatro veces antes de darse por vencido. Entonces, después de probar esto por 4 veces, aún falla.
Se agradecen todos los consejos sobre cómo podría mejorar esto.
qué sucede con todos (o la mayoría) de los archivos, con los archivos al azar, o con un conjunto limitado y reproducible? ¿Está configurando Metadatos antes de la primera carga? He visto casos en los que los metadatos (o la falta de) en algunos archivos pueden causar algunos problemas extraños. Si aún no lo has probado, puede valer la pena intentarlo. –
archivos en su mayoría aleatorios y no utilizamos ningún metadato :( –
Solo una aproximación. ¿Se ha asegurado de que esos archivos aleatorios se carguen correctamente en s3? Intente descargar esos archivos mediante la solicitud GET o alguna otra herramienta. – shashankaholic