我使用 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
更新:
我检查了图像 url 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 后端时出现了问题。
你觉得我可能做错了什么?