使用tinys3上传到Amazon S3

6
我正在使用Python和tinys3将文件写入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时,它可以正常工作,因此问题不在访问密钥或秘密密钥中。

3个回答

14

我终于弄明白了,这里是正确的代码:

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/zh_cn/general/latest/gr/rande.html。 在“Amazon Simple Storage Service (S3)”标题下查找。

我从这个主题中得到了灵感:https://github.com/smore-inc/tinys3/issues/5


2
也适用于我。 - Jordan Mack
@jm9k 我不明白这个键从哪里来。我应该从哪里获取它? - user6165050
2
@Dex' ter,该密钥是AWS访问密钥。您可以在AWS IAM管理区域中创建它。 - Jordan Mack

3

如果使用IAM用户,则需要允许"s3:PutObjectAcl"操作。


1

我不知道为什么,但这段代码从来没有为我工作过。 我已经转换到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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接