django-storages s3boto后端上传的文件链接已损坏

时间:2012-07-18 15:36:47

标签: django amazon-s3 boto django-file-upload django-storage

我正在使用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后端时有问题。

你认为我可能做错了什么?

0 个答案:

没有答案