web-dev-qa-db-fra.com

Boto - Téléchargement d'un fichier vers un emplacement spécifique sur Amazon S3

C'est le code à partir duquel je travaille

import sys
import boto
import boto.s3

# AWS ACCESS DETAILS
AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''

bucket_name = AWS_ACCESS_KEY_ID.lower() + '-mah-bucket' conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
bucket = conn.create_bucket(bucket_name, location=boto.s3.connection.Location.DEFAULT)
uploadfile = sys.argv[1]

print 'Uploading %s to Amazon S3 bucket %s' % \
       (uploadfile, bucket_name)

def percent_cb(complete, total):
    sys.stdout.write('.')
    sys.stdout.flush()

from boto.s3.key import Key
k = Key(bucket)
k.key = 'my test file'
k.set_contents_from_filename(testfile, cb=percent_cb, num_cb=10)

Sur mon S3, j'ai créé des "répertoires", comme celui-ci "bucket/images/holiday". Je sais que ce ne sont que des répertoires virtuels.

Ma question est, comment puis-je modifier ce téléchargement spécifiquement dans le répertoire virtuel bucket/images/holiday sur S3 plutôt que la racine du bucket?

36
Jimmy

Tout ce que vous devez faire est d'ajouter le chemin du répertoire virtuel au nom de la clé avant le téléchargement. Par exemple:

key_name = 'my test file'
path = 'images/holiday'
full_key_name = os.path.join(path, key_name)
k = bucket.new_key(full_key_name)
k.set_contents_from_filename(...)

Vous devrez peut-être changer cela un peu pour votre application, mais j'espère que cela vous donnera l'idée de base.

54
garnaat

Vous pouvez également utiliser ceci:

from boto.s3.key import Key

bucket = conn.get_bucket('images')
k = Key(bucket)
k.key = 'holiday/my_test_file.txt'

Cela fonctionne comme ça dans mon s3_percent_uploader

python.exe s3_percent_uploader.py test_upload.txt testbucket test/upload.txt

après le téléchargement, le fichier sera dans testbucket/test/upload.txt

2
olekb