Boto — загрузка файла в определенное место на Amazon S3

Это код, с которым я работаю

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)

На моем S3 я создал «каталоги», например «ведро/изображения/праздник». Я знаю, что это только виртуальные каталоги.

Мой вопрос: как я могу изменить эту загрузку специально для виртуального каталога Bucket/images/Holiday на S3, а не в корень ведра?


person Jimmy    schedule 14.01.2013    source источник


Ответы (2)


Все, что вам нужно сделать, это добавить путь к виртуальному каталогу перед именем ключа перед загрузкой. Например:

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

Возможно, вам придется немного изменить это для вашего приложения, но, надеюсь, это даст вам основную идею.

person garnaat    schedule 14.01.2013
comment
Джимми, вы можете вставить код для загрузки, который сработал. Я не вижу, чтобы вы использовали переменную uploadfile где-либо в приведенном ниже коде. - person Murphy; 12.07.2016
comment
Это также работает с многочастными загрузками mp = self._bucket.initiate_multipart_upload(bucket_key) - person storm_m2138; 09.08.2016

Вы также можете использовать это:

from boto.s3.key import Key

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

В моем s3_percent_uploader это работает так.

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

после загрузки файл будет в testbucket/test/upload.txt

person olekb    schedule 19.12.2016