Boto: carga de archivos en una ubicación específica en Amazon S3

Este es el código del que estoy trabajando.

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) 

En mi S3 he creado “directorios”, como este “bucket / images / holiday”. Sé que estos son solo directorios virtuales.

Mi pregunta es, ¿cómo puedo modificar esta carga específicamente al directorio virtual de bucket / images / holiday en S3 en lugar de la raíz del bucket?

Todo lo que debe hacer es anteponer la ruta del directorio virtual al nombre de la clave antes de cargar. Por ejemplo:

 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(...) 

Puede que tenga que cambiar eso un poco para su aplicación, pero con suerte eso le dará la idea básica.

También puedes usar esto:

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

Funciona así en mi s3_percent_uploader

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

después de cargar el archivo estará en testbucket / test / upload.txt