我正在使用django-storages' s3boto后端作为我的默认存储后端。
如果我通过AWS控制台上传到我可公开访问的存储桶,我可以轻松访问它。如果我使用我的Django表单保存文件,该文件将以正确的大小显示在AWS控制台中。但是文件链接显示了一个损坏的图像,使用AWS的open
菜单命令和Django管理员。
我的相关设置是:
AWS_ACCESS_KEY_ID = '***'
AWS_SECRET_ACCESS_KEY = '***'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_STORAGE_BUCKET_NAME = 'mybucket'
AWS_QUERYSTRING_AUTH = False
更新
我使用curl -v
检查了图片网址,回复为HTTP/1.1 200 OK
。响应标头是:
< HTTP/1.1 200 OK
< x-amz-id-2: /kR/hcgWI2vUOP7/1+kqAsKfSSx4BWtxnipNcQAadeRaJzmNuBIgD17Wff9N856T
< x-amz-request-id: 17C13B7A2B20E50A
< Date: Thu, 19 Jul 2012 05:05:58 GMT
< Last-Modified: Wed, 18 Jul 2012 19:26:48 GMT
< ETag: "35b2ef1fb7552b850cf477f04141dddc"
< Accept-Ranges: bytes
< Content-Type: image/jpeg
< Content-Length: 101086
< Server: AmazonS3
然后二进制字节开始流动。所以在上传过程中文件必须以某种方式被破坏。
因为我在上传表单中使用了<input type="file" multiple>
,所以我手动处理文件上传:
if self.request.FILES:
files = self.request.FILES.getlist('files')
for file in files:
try:
# Check the file is an image
Image.open(file).verify()
except:
# not an image
pass
else:
photo = Photo()
photo.image = file
photo.save()
这适用于默认存储后端,但显然使用s3boto后端时有问题。
你认为我可能做错了什么?