2014-09-11 265 views
1

我保存在我的本地服务器映像,然后上传到S3
现在我想将它编辑到存储的图像直接到Amazon S3scrapy将图像存储到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

我发现这个问题的原因是上传的政策。函数Key.set_contents_from_string()采用参数策略,默认设置为S3FileStore.POLICY。因此,修改scrapy /的contrib /管道/ 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) 

也许你可以试试它,在这里分享的结果。

+0

谢谢!它运作良好! – user2492364 2014-09-21 09:12:19

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

how.are.you应该是S3存储存在到您的S3帐户,它将存储您上传的图片。如果你想在任何虚拟路径里面存储图像,那么你需要创建这个文件夹到你的S3 Bucket中。

+0

我做到了,但仍然无法工作。 s3:// bucketname/image_store/ – user2492364 2014-09-11 07:52:46

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

如果试运行successfuly然后看看你的权限,设置权限,你可以看看amazon configuration

+0

权限确定,并且scrapy没有显示错误。但图像仍然不在s3服务器 – user2492364 2014-09-12 01:15:47