Boto-Carga de archivos en una ubicación específica en Amazon S3


Este es el código desde el 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 sólo directorios virtuales.

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

Author: Winston Chen, 2013-01-14

2 answers

Todo lo que debe hacer es anteponer la ruta del directorio virtual al nombre de la clave antes de cargarla. 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(...)

Es posible que tenga que cambiar un poco para su aplicación, pero espero que eso le dé la idea básica.

 53
Author: garnaat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-14 13:45:58

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

 2
Author: olekb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-19 14:54:07