scrapy商店图片到亚马逊s3

时间:2014-09-11 01:50:54

标签: python amazon-s3 scrapy

我将图像存储在本地服务器中,然后上传到s3
现在我想将它直接编辑为存储的图像到amazon s3

但是错误是:

boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden

这是我的settings.py

AWS_ACCESS_KEY_ID = "XXXX"
AWS_SECRET_ACCESS_KEY = "XXXX"
IMAGES_STORE = 's3://how.are.you/'

我需要添加一些东西吗?

我的scrapy版:Scrapy == 0.22.2

请指导我,谢谢!

3 个答案:

答案 0 :(得分:0)

AWS_ACCESS_KEY_ID = "xxxxxx"
AWS_SECRET_ACCESS_KEY = "xxxxxx"
IMAGES_STORE = "s3://bucketname/virtual_path/"

how.are.you 应该是S3帐户中存在的S3 Bucket,它会存储您上传的图片。如果要将图像存储在任何 virtual_path 中,则需要在S3 Bucket中创建此文件夹。

答案 1 :(得分:0)

我认为问题不在您的代码中,实际上问题在于权限,请先检查您的凭据,并确保您有权访问和写入s3存储桶。

    import boto
    s3 = boto.connect_s3('access_key', 'secret_key')
    bucket = s3.lookup('bucket_name')
    key = bucket.new_key('testkey')
    key.set_contents_from_string('This is a test')
    key.delete()

如果测试运行成功,那么请查看您的许可,设置权限,您可以查看amazon configuration

答案 2 :(得分:0)

我发现问题的原因是上传政策。函数Key.set_contents_from_string()接受参数策略,默认设置为 S3FileStore.POLICY 。所以修改scrapy / contrib / pipeline / files.py中的代码,更改

 return threads.deferToThread(k.set_contents_from_string, buf.getvalue(),
                              headers=h, policy=self.POLICY)

 return threads.deferToThread(k.set_contents_from_string, buf.getvalue(),
                              headers=h)

也许你可以尝试一下,并在这里分享结果。