Problèmes lors du téléchargement de fichiers volumineux sur Amazon S3
J'ai essayé d'utiliser Amazon-SDK(Java) exemple de code S3TransferProgressSample.java
de télécharger de gros fichiers à Amazon S3 de stockage (également posté ici sur AWS docs).
Mais quand je suis en train de télécharger 11 GO de fichiers, le téléchargement est coincé à différents points avec le message d'erreur:
Unable to upload file to Amazon S3: Unable to upload part: Unable toexecute HTTP request: Unbuffered entity enclosing request can not be repeated " (attached screenshot).
Il semble que l'après IOException se produit le SDK n'est pas en mesure de réessayer la demande (voir ci-dessous).
Personne ne rencontre ce? Quelle est la meilleure pratique pour résoudre ce problème? Tout le code est apprécié.
INFO: Received successful response: 200, AWS Request ID:
2B66E7669E24DA75<br> Jan 15, 2011 6:44:46 AM
com.amazonaws.http.HttpClient execute<br> INFO: Sending Request: PUT
s3.amazonaws.com /test_file_upload/autogenerated.txt Parameters:
(uploadId:
m9MqxzD484Ys1nifnX._IzJBGbCFIoT_zBg0xdd6kkZ4TAtmcG0lXQOE.LeiSEuqn6NjcosIQLXJeKzSnKllmw--, partNumber: 1494, )<br> Jan 15, 2011 6:45:10 AM
org.apache.commons.httpclient.HttpMethodDirector executeWithRetry<br>
**INFO: I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error**<br>
Jan 15, 2011 6:45:10 AM
org.apache.commons.httpclient.HttpMethodDirector executeWithRetry<br>
INFO: Retrying request<br> Jan 15, 2011 6:45:12 AM
com.amazonaws.http.HttpClient execute<br> WARNING: Unable to execute
HTTP request: Unbuffered entity enclosing request can not be
repeated.<br> Jan 15, 2011 6:45:12 AM
org.apache.commons.httpclient.HttpMethodDirector executeWithRetry<br>
**INFO: I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error**<br>
Jan 15, 2011 6:45:12 AM
org.apache.commons.httpclient.HttpMethodDirector executeWithRetry<br>
INFO: Retrying request<br> Jan 15, 2011 6:45:13 AM
org.apache.commons.httpclient.HttpMethodDirector executeWithRetry<br>
**INFO: I/O exception (java.net.SocketException) caught when processing request: Connection reset by peer: socket write error**<br>
Jan 15, 2011 6:45:13 AM
org.apache.commons.httpclient.HttpMethodDirector executeWithRetry<br>
INFO: Retrying request<br> Jan 15, 2011 6:45:13 AM
com.amazonaws.http.HttpClient execute<br>
**WARNING: Unable to execute HTTP request: Unbuffered entity enclosing request can not be repeated.**<br> Jan 15, 2011 6:45:14 AM
com.amazonaws.http.HttpClient execute<br> WARNING: Unable to execute
HTTP request: Unbuffered entity enclosing request can not be
repeated.<br> Jan 15, 2011 6:45:14 AM com.amazonaws.http.HttpClient
execute<br> WARNING: Unable to execute HTTP request: Unbuffered entity
enclosing request can not be repeated.<br> Jan 15, 2011 6:45:14 AM
com.amazonaws.http.HttpClient execute<br> WARNING: Unable to execute
HTTP request: Unbuffered entity enclosing request can not be
repeated.<br> Jan 15, 2011 6:45:15 AM com.amazonaws.http.HttpClient
execute<br> WARNING: Unable to execute HTTP request: Unbuffered entity
enclosing request can not be repeated.<br> Jan 15, 2011 6:45:16 AM
com.amazonaws.http.HttpClient execute<br> WARNING: Unable to execute
HTTP request: Unbuffered entity enclosing request can not be
repeated.<br> Jan 15, 2011 6:45:16 AM
com.amazonaws.http.HttpClient
execute<br> WARNING: Unable to execute HTTP request: Unbuffered entity
enclosing request can not be repeated.<br> Jan 15, 2011 6:45:17 AM
com.amazonaws.http.HttpClient execute<br> WARNING: Unable to execute
HTTP request: Unbuffered entity enclosing request can not be
repeated.<br> Jan 15, 2011 6:45:19 AM com.amazonaws.http.HttpClient
execute<br> WARNING: Unable to execute HTTP request: Unbuffered entity
enclosing request can not be repeated.<br> Jan 15, 2011 6:45:19 AM
com.amazonaws.http.HttpClient execute<br> ....<br> Jan 15, 2011
6:45:21 AM com.amazonaws.http.HttpClient handleResponse<br>
**INFO: Received successful response: 204, AWS Request ID: E794B8FCA4C3D007**<br> Jan 15, 2011 6:45:21 AM
com.amazonaws.http.HttpClient execute<br> ...<br> Jan 15, 2011 6:45:19
AM com.amazonaws.http.HttpClient execute<br> INFO: Sending Request:
DELETE s3.amazonaws.com /test_file_upload/autogenerated.txt
Parameters:<br> ...<br> Jan 15, 2011 6:47:01 AM
com.amazonaws.http.HttpClient handleErrorResponse<br> INFO: Received
error response: Status Code: 404, AWS Request ID: 0CE25DFE767CC595,
AWS Error Code: NoSuchUpload, AWS Error Message: The specified upload
does not exist. The upload ID may be invalid, or the upload may have
been aborted or completed.<br>
source d'informationauteur Alexey
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser le faible niveau d'API.
Cela vous donnera plus de contrôle quand les choses vont mal, ils sont susceptibles de le faire avec un 11 GO de fichier.
Des demandes et de S3 faire échouer de temps en temps. Avec le faible niveau de l'API, vous serez en mesure de relancer une partie de l'upload si elle échoue.
Refactoring l'exemple de l'Amazonie docs un peu:
Note: je ne suis pas un développeur java donc je pourrais avoir gâché les choses du point de vue syntaxique, mais j'espère que cela vous arrive d'aller dans la bonne direction. Aussi, vous aurez envie de les ajouter dans une " nouvelle tentative de gré à gré afin d'éviter une boucle infinie si le téléchargement échoue à plusieurs reprises.
Je pense que vous devriez essayer plusieurs parties de l'API prises en charge par AWS.
Check this out : http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html
Comme une note de côté, les erreurs 404 peut être levée si vous essayez de faire une multipart télécharger sur une clé qui est déjà en vertu d'un multipart télécharger.
Êtes-vous essayer de télécharger un seul fichier de taille 11 GO? Ou la taille de tous vos fichiers combinés est de 11 GO? Parce que la limite de Taille de Fichier sur S3 est de 5 go.
La réponse de Geoff Appleford fonctionne pour moi.
Cependant, je voudrais ajouter un && retryCount < MAX_RETRIES à l'tandis que la boucle de contrôle et d'incrément de la retryCount sur chaque exception interceptée à l'intérieur de la alors que.
Aviad
Je voulais ajouter un commentaire à Geoff Appleford de la réponse, mais AFIN de ne pas me le permettre. En général sa réponse à utiliser à faible niveau d'API travaille bien, mais même si nous n'en avons maintenant une-lors de la boucle du chemin de la boucle est conçue il est logique de nouvelle tentative. Dans son code, extrait de la position dans le fichier, n'augmente que lorsque y est un succès, sinon vous téléchargez la même partie de nouveau.