Alles mit meinem Code funktioniert. Die einzige Gefahr, mit der ich derzeit konfrontiert bin, ist, dass ich den Ordner im S3-Bucket, in den ich meine Datei einfügen möchte, nicht angeben kann.
s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>', filename)
Ich habe beide ausprobiert:
s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>/folder/', filename)
und:
s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>', '/folder/'+filename)
wenn jemand irgendwelche Tipps hat, wie man dies in einen bestimmten Ordner leiten kann (falls dies möglich ist), lass es mich wissen!
Sie müssen den Schlüsselwert nicht als absoluten Pfad übergeben. Folgendes sollte funktionieren:
upload_file('/tmp/' + filename, '<bucket-name>', 'folder/{}'.format(filename))
Ich habe mein Problem herausgefunden. Ich hatte die richtige Idee mit der /folder/
-Option im Bereich der Schlüsselparameter. Ich brauchte jedoch nicht den ersten /
. Vielen Dank an alle! Dies ist im Wesentlichen die gleiche Idee wie der vorstehende Vorschlag von hjpotter92.
s3.upload_file (Dateipfad, Bucket-Name, '% s /% s'% (Bucket-Ordner, Dest_File-Name)
Hier ist die Methode, die die geschachtelte Verzeichnisstruktur berücksichtigt und in der Lage ist, ein vollständiges Verzeichnis mit Boto hochzuladen
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)