デフォルトのストレージ バックエンドとして django-storages の s3boto バックエンドを使用しています。
AWS コンソール経由で公開されているバケットにアップロードすると、問題なくアクセスできます。Django フォームを使用してファイルを保存すると、AWS コンソールにファイルが正しいサイズで表示されます。open
しかし、ファイルへのリンクは、AWS のメニュー コマンドと 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 バックエンドを使用すると明らかに問題があります。
私が何を間違っていると思いますか?