Boto – Uploading file to a specific location on Amazon S3
Question:
This is the code I’m working from
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)
On my S3 I have created “directories”, like this “bucket/images/holiday”. I know these are only virtual directories.
My question is, how can I modify this upload specifically to bucket/images/holiday virtual directory on S3 rather than the bucket root?
Answers:
All you should have to do is prepend the virtual directory path to the key name prior to uploading. For example:
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(...)
You may have to change that a bit for your application but hopefully that gives you the basic idea.
You can also use this:
from boto.s3.key import Key
bucket = conn.get_bucket('images')
k = Key(bucket)
k.key = 'holiday/my_test_file.txt'
It works like this in my s3_percent_uploader
python.exe s3_percent_uploader.py test_upload.txt testbucket test/upload.txt
after upload file will be in testbucket/test/upload.txt
This is the code I’m working from
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)
On my S3 I have created “directories”, like this “bucket/images/holiday”. I know these are only virtual directories.
My question is, how can I modify this upload specifically to bucket/images/holiday virtual directory on S3 rather than the bucket root?
All you should have to do is prepend the virtual directory path to the key name prior to uploading. For example:
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(...)
You may have to change that a bit for your application but hopefully that gives you the basic idea.
You can also use this:
from boto.s3.key import Key
bucket = conn.get_bucket('images')
k = Key(bucket)
k.key = 'holiday/my_test_file.txt'
It works like this in my s3_percent_uploader
python.exe s3_percent_uploader.py test_upload.txt testbucket test/upload.txt
after upload file will be in testbucket/test/upload.txt