2012-10-08 2 views
12

J'ai un fichier JPG avec 800KB. J'essaie de télécharger sur S3 et continue d'obtenir une erreur de délai d'attente. Pouvez-vous comprendre ce qui ne va pas? 800 Ko est plutôt petit pour le téléchargement.amazon s3 télécharger le délai d'expiration

Message d'erreur: La connexion de votre socket au serveur n'a pas été lue ou écrite dans le délai imparti. Les connexions inactives seront fermées.

Code d'état HTTP: 400

AWS Code d'erreur: RequestTimeout

Long contentLength = null; 
System.out.println("Uploading a new object to S3 from a file\n"); 
try { 
    byte[] contentBytes = IOUtils.toByteArray(is); 
    contentLength = Long.valueOf(contentBytes.length); 
} catch (IOException e) { 
    System.err.printf("Failed while reading bytes from %s", e.getMessage()); 
} 

ObjectMetadata metadata = new ObjectMetadata(); 
metadata.setContentLength(contentLength);   

s3.putObject(new PutObjectRequest(bucketName, key, is, metadata)); 
+1

Cela me arrive de temps en temps, et je viens de recommencer le téléchargement. –

+0

Je reçois tout le temps, même avec le téléchargement de fichiers 1KB. – user1688346

Répondre

10

Est-il possible que IOUtils.toByteArray draine votre flux d'entrée afin qu'il n'y ait plus de données à être lues à partir quand l'appel de service est fait? Dans ce cas, stream.reset() réglerait le problème. Mais si vous ne faites que télécharger un fichier (par opposition à un InputStream arbitraire), vous pouvez utiliser la forme plus simple de AmazonS3.putObject() qui prend un fichier, et vous n'aurez pas besoin de calculer le contenu. longueur du tout.

http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3.html#putObject(java.lang.String, java.lang.String, java.io.File)

Cette nouvelle tentative sera effectuée automatiquement ces erreurs de réseau à plusieurs reprises. Vous pouvez modifier le nombre de tentatives que le client utilise en l'instanciant avec un objet ClientConfiguration.

http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/ClientConfiguration.html#setMaxErrorRetry(int)