使用tinys3上传到Amazon S3

2024-04-25 13:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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时,它工作了,所以问题不在访问密钥或密钥中。


Tags: 文件代码importtxtdatas3bucketresponse
3条回答

我终于明白了。下面是正确的代码:

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')

您必须使用region端点,而不是s3.amazonaws.com。您可以从这里查找区域终结点:http://docs.aws.amazon.com/general/latest/gr/rande.html。在“Amazon简单存储服务(S3)”标题下查看

我从这篇文章中得到了这个想法:https://github.com/smore-inc/tinys3/issues/5

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

不知道为什么,但这段代码对我不起作用。 我已经切换到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)

相关问题 更多 >