2013-01-14 2 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

오 upload.txt/testbucket/시험에있을 것입니다, 그건 대단히 감사합니다. – Jimmy

+0

Jimmy는 업로드 된 코드를 붙여 넣을 수 있습니까? 나는 당신이 아래의 코드에서 "uploadfile"변수를 사용하는 것을 보지 않는다. – Murphy

+0

이것은 multipart 업로드와도 작동한다. **'''mp = self._bucket.initiate_multipart_upload (bucket_key)''' –

2

당신은이를 사용할 수 있습니다

그것은 내 s3_percent_uploader

python.exe s3_percent_uploader.py test_upload.txt testbucket test/upload.txt 

후 업로드 파일에 다음과 같이 작동

from boto.s3.key import Key 

bucket = conn.get_bucket('images') 
k = Key(bucket) 
k.key = 'holiday/my_test_file.txt'