wake-up-neo.net

hochladen der Datei in einen bestimmten Ordner in S3 mit boto3

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!

10
Alex

Sie müssen den Schlüsselwert nicht als absoluten Pfad übergeben. Folgendes sollte funktionieren:

upload_file('/tmp/' + filename, '<bucket-name>', 'folder/{}'.format(filename))
22
hjpotter92

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.

3
Alex

Für Python 3.x

s3.upload_file (Dateipfad, Bucket-Name, '% s /% s'% (Bucket-Ordner, Dest_File-Name)

0
Andrew Figaroa

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)
0
Suyash Soni