Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Boto - Uploading file to a specific location on Amazon S3

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?

like image 725
Jimmy Avatar asked Jan 14 '13 11:01

Jimmy


People also ask

How do I upload files to aws S3?

In the Amazon S3 console, choose the bucket where you want to upload an object, choose Upload, and then choose Add Files. In the file selection dialog box, find the file that you want to upload, choose it, choose Open, and then choose Start Upload. You can watch the progress of the upload in the Transfer pane.


1 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.

like image 200
garnaat Avatar answered Oct 05 '22 23:10

garnaat