| #!/usr/bin/python |
| |
| """ |
| Upload a file to S3 |
| """ |
| |
| from sys import argv, stdout |
| from time import time |
| from os.path import basename |
| from optparse import OptionParser |
| |
| from boto.s3.key import Key |
| from boto.s3.connection import S3Connection |
| |
| |
| def uploadFile( bucket, filename, dest=None ): |
| "Upload a file to a bucket" |
| if not bucket: |
| bucket = 'onos' |
| if not dest: |
| key = basename( filename ) |
| else: |
| key = dest + basename( filename ) #FIXME add the / |
| print '* Uploading', filename, 'to bucket', bucket, 'as', key |
| stdout.flush() |
| start = time() |
| def callback( transmitted, size ): |
| "Progress callback for set_contents_from_filename" |
| elapsed = time() - start |
| percent = 100.0 * transmitted / size |
| kbps = .001 * transmitted / elapsed |
| print ( '\r%d bytes transmitted of %d (%.2f%%),' |
| ' %.2f KB/sec ' % |
| ( transmitted, size, percent, kbps ) ), |
| stdout.flush() |
| conn = S3Connection() |
| bucket = conn.get_bucket( bucket ) |
| k = Key( bucket ) |
| k.key = key |
| k.set_contents_from_filename( filename, cb=callback, num_cb=100 ) |
| print |
| elapsed = time() - start |
| print "* elapsed time: %.2f seconds" % elapsed |
| |
| if __name__ == '__main__': |
| usage = "Usage: %prog [options] <file to upload>" |
| parser = OptionParser(usage=usage) |
| parser.add_option("-b", "--bucket", dest="bucket", |
| help="Bucket on S3") |
| parser.add_option("-d", "--dest", dest="dest", |
| help="Destination path in bucket") |
| parser.add_option("-k", "--key", dest="awsKey", |
| help="Bucket on S3") |
| parser.add_option("-s", "--secret", dest="awsSecret", |
| help="Bucket on S3") |
| (options, args) = parser.parse_args() |
| |
| if len( args ) == 0: |
| parser.error("missing filenames") |
| for file in args: |
| uploadFile( options.bucket, file, options.dest ) |
| |
| #FIXME key and secret are unused |