2013-01-14 13 views
33

これは私が、私はこの「バケット/画像/休日」などの「ディレクトリ」を、作成している私のS3で後のBoto - アマゾン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のバケツ/イメージ/休日の仮想ディレクトリにこのアップロードを具体的に変更することができますか?

答えて

51

アップロードする前に、仮想ディレクトリパスをキー名の前に追加するだけです。例:

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

このアプリケーションを少し変更する必要があるかもしれませんが、基本的な考え方がわかります。あなたはまた、これを使用することができ

+0

testbucket /テスト/ upload.txtになりますああ、それはですよかった。ありがとう。 – Jimmy

+0

ジミーは、あなたがアップロードしたコードを貼り付けることができます。私はあなたが以下のコードのどこかで "uploadfile"変数を使用しているのを見ることはありません – Murphy

+0

これは** multipartのアップロードでも動作します** '' 'mp = self._bucket.initiate_multipart_upload(bucket_key)' '' –

2

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 

でこのように動作しますアップロードファイルの後には、

関連する問題