我将图像存储在本地服务器中,然后上传到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
请指导我,谢谢!
答案 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)
也许你可以尝试一下,并在这里分享结果。