2014-09-01 4 views
4

파이썬과 tinys3를 사용하여 S3에 파일을 쓰지만 작동하지 않습니다. 출력 제공tinys3을 사용하여 Amazon S3에 업로드

import tinys3 
conn = tinys3.Connection('xxxxxxx','xxxxxxxx',tls=True) 

f = open('testing_s3.txt','rb') 
print conn.upload('testing_data/testing_s3.txt',f,'testing-bucket') 
print conn.get('testing_data/testing_s3.txt','testing-bucket') 

: 여기 내 코드의

<Response [301]> 
<Response [301]> 

내가 엔드 포인트를 지정하려고, 내가 얻을 : 내가 잘못 뭘하는지

requests.exceptions.HTTPError: 403 Client Error: Forbidden 

어떤 생각을?

편집 : boto를 사용하면 작동하므로 문제가 액세스 키나 비밀 키에 없습니다.

답변

12

나는 이것을 알아 냈습니다. 다음은 올바른 코드입니다.

import tinys3 
conn = tinys3.Connection('xxxxxxx','xxxxxxxx',tls=True,endpoint='s3-us-west-1.amazonaws.com') 

f = open('testing_s3.txt','rb') 
print conn.upload('testing_data/testing_s3.txt',f,'testing-bucket') 
print conn.get('testing_data/testing_s3.txt','testing-bucket') 

s3.amazonaws.com이 아닌 지역 끝점을 사용해야합니다. 여기에서 지역 끝점을 찾을 수 있습니다 : http://docs.aws.amazon.com/general/latest/gr/rande.html. "Amazon Simple Storage Service (S3)"제목을보십시오. 조치 : "PutObjectAcl (S3)"을 허용 할 필요가있는 IAM 사용자를 사용하는 경우 https://github.com/smore-inc/tinys3/issues/5

+2

나를 위해 일했습니다. –

+0

@ jm9k 키가 어디에서 왔는지 이해할 수 없습니다. 어디에서 가져 가야합니까? –

+2

@Dex 'ter 키는 AWS 액세스 키입니다. AWS IAM 관리 영역에서이를 생성합니다. –

2

:

나는이 스레드에서 아이디어를 얻었다.

0

이유는 모르겠지만이 코드는 절대로 효과가 없습니다. 나는 boto로 전환했으며, 방금 한 번에 파일을 업로드했습니다.

AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXXXXXXXXXX' 
    AWS_SECRET_ACCESS_KEY = 'XXXXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXXX' 

    bucket_name = 'my-bucket' 
    conn = boto.connect_s3(AWS_ACCESS_KEY_ID, 
      AWS_SECRET_ACCESS_KEY) 

    bucket = conn.get_bucket('my-bucket') 

    print 'Uploading %s to Amazon S3 bucket %s' % \ 
    (filename, bucket_name) 

    k = Key(bucket) 
    k.key = filename 
    k.set_contents_from_filename(filename, 
     cb=percent_cb, num_cb=10) 
관련 문제