1

デフォルトのストレージ バックエンドとして 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 バックエンドを使用すると明らかに問題があります。

私が何を間違っていると思いますか?

4

0 に答える 0