Hier, j'ai commencé à utiliser Amazon S3 avec boto, j'ai mis en place un script python pour créer un seau et télécharger des images dans un répertoire. Je l'ai couru plusieurs fois et ça semblait aller.Erreur de connexion fermée à partir d'Amazon S3 après avoir changé pour boto get_bucket
Je ne veux pas être constamment créer des seaux mais alors j'adapté mon script get_bucket:
import os
import boto
s3 = boto.connect_s3()
bucket = s3.get_bucket('images')
# Run Selenium test process to create images
for root, dirs, files in os.walk(imagesPath):
for name in files:
filename = os.path.join(root, name)
key = bucket.new_key('{0}/{1}/{2}'.format(revisionNumber, images_process, name))
print "Uploading " + filename + " to Amazon S3"
key.set_contents_from_filename(filename)
key.set_acl('public-read')
L'erreur vient de la ligne key.set_contents_from_filename(filename)
Ce code est essentiellement Boto exemple de code de la S3 guide de démarrage que j'ai mis dans une boucle. Je suppose que le problème est que c'est génial de faire les choses la première fois, mais n'est pas assez robuste pour faire face à l'écrasement, etc. Dois-je donner à boto plus que le nom de fichier à télécharger?
La sortie du script est:
[exec] Uploading images/Add_Employer_Process/20227M/1.png to Amazon S3
[exec] Traceback (most recent call last):
[exec] File "addEmployerProcess.py", line 121, in <module>
[exec] k.set_contents_from_filename(filename)
[exec] File "C:\Python26\lib\site-packages\boto\s3\key.py", line 969, inset_contents_from_filename
[exec] encrypt_key=encrypt_key)
[exec] File "C:\Python26\lib\site-packages\boto\s3\key.py", line 902, inset_contents_from_file
[exec] size=size)
[exec] File "C:\Python26\lib\site-packages\boto\s3\key.py", line 660, insend_file
[exec] query_args=query_args)
[exec] File "C:\Python26\lib\site-packages\boto\s3\connection.py", line 449, in make_request
[exec] override_num_retries=override_num_retries)
[exec] File "C:\Python26\lib\site-packages\boto\connection.py", line 829, in make_request
[exec] return self._mexe(http_request, sender, override_num_retries)
[exec] File "C:\Python26\lib\site-packages\boto\connection.py", line 794, in _mexe
[exec] raise e
[exec] socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host
Je suis nouveau à tout cela, python inclus, de sorte que toute aide serait appréciée :)
Merci. Ce set_acl a été extrait directement de l'exemple de code. L'erreur semble avoir été un problème de délai d'attente que j'ai réussi à résoudre, mais je suis à la maison maintenant et ne me souviens pas du correctif. J'ai changé le 'get_bucket()' en 'lookup()' mais je ne suis pas sûr de l'impact de cela. Je garderai certainement une note de cette commande de débogage en cas de problèmes supplémentaires. Merci. –
BTW, lookup() appelle en réalité get_bucket(). La seule différence entre eux est get_bucket() jette une exception si le compartiment n'est pas trouvé et que lookup renvoie None. Donc, il ne semble pas que cela aurait dû faire une différence. – garnaat
À droite, je vais revenir à get_bucket() alors. La seule différence que je peux voir maintenant dans mon code est que j'ai ajouté 'time.sleep (2)' après la boucle qui alors est où la copie locale des fichiers est supprimée. –