#!/usr/bin/env python """Upload to S3""" import boto import os, os.path import sys import time # aws variables __access__ = 'your access key' __secretkey__ = 'your secret key' def usage(msg=None): """Tell the user how to use this app.""" progname = sys.argv[0].split('/')[-1] if msg: sys.stderr.write('%s: %s\n' % (progname, msg)) sys.stderr.write("""\ usage: %s bucket-filename filename-to-upload example: %s /mybucket/secrit-passwords /etc/passwd """ % (progname, progname)) sys.exit(1) def main(args): """Main branching logic.""" if len(args) != 2: usage() keyname = args[0] filename = args[1] if not os.path.exists(filename): usage('%s does not exist!' % filename) # keyname must be in the format /bucketname/filename or # /bucketname/dirname/filename # we extract the bucketname and make sure it exists # we also extract "filename" or "dirname/filename" from the keyname ksplit = keyname.split('/') if len(ksplit) < 3: usage('invalid bucket filename: %s' % keyname) wantedbucket = ksplit[1] storedfilename = '/'.join(ksplit[2:]) conn = boto.connect_s3(__access__, __secretkey__) buckets = conn.get_all_buckets() targetbucket = None for bucket in buckets: if bucket.name == wantedbucket: targetbucket = bucket if not targetbucket: usage('unable to find bucket on s3: %s' % wantedbucket) print 'uploading %s to bucket %s, keyname %s in five seconds' % \ (filename, wantedbucket, storedfilename) time.sleep(5) k = boto.s3.key.Key(targetbucket) k.name = storedfilename k.set_contents_from_filename(filename) k.set_acl('public-read') # added for debugging. you can remove it if you want fnames = targetbucket.get_all_keys() print 'files in bucket %s:' % targetbucket.name for fname in fnames: print fname.name sys.exit(0) if __name__ == '__main__': main(sys.argv[1:])