Tout avec mon code fonctionne. Le seul piège auquel je suis confronté actuellement est que je ne peux pas spécifier le dossier dans le compartiment S3 dans lequel je souhaite placer mon fichier. Voici ce que j'ai:
s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>', filename)
J'ai essayé les deux:
s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>/folder/', filename)
et:
s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>', '/folder/'+filename)
si quelqu'un a des conseils sur la façon de diriger cela vers un dossier spécifique (si cela est possible), s'il vous plaît faites le moi savoir!
Vous n'avez pas besoin de transmettre la valeur de clé sous forme de chemin absolu. Ce qui suit devrait fonctionner:
upload_file('/tmp/' + filename, '<bucket-name>', 'folder/{}'.format(filename))
J'ai compris mon problème. J'ai eu la bonne idée avec l'option /folder/
dans la zone de paramètre clé, cependant, je n'avais pas besoin du premier /
Merci à tous! C'est essentiellement la même idée que la suggestion de hjpotter92 ci-dessus.
s3.upload_file (chemin_fichier, nom du bucket, '% s /% s'% (bucket_folder, nom du fichier de destination))
Voici la méthode qui se chargera de la structure de répertoires imbriqués et sera capable de télécharger un répertoire complet en utilisant boto
def upload_directory():
for root, dirs, files in os.walk(settings.LOCAL_SYNC_LOCATION):
nested_dir = root.replace(settings.LOCAL_SYNC_LOCATION, '')
if nested_dir:
nested_dir = nested_dir.replace('/','',1) + '/'
for file in files:
complete_file_path = os.path.join(root, file)
file = nested_dir + file if nested_dir else file
print "[S3_UPLOAD] Going to upload {complete_file_path} to s3 bucket {s3_bucket} as {file}"\
.format(complete_file_path=complete_file_path, s3_bucket=settings.S3_BUCKET, file=file)
s3_client.upload_file(complete_file_path, settings.S3_BUCKET, file)