FileField
によって返される値を渡します image
文字列または反復可能であるかのように、応答に直接入力します。 ソースコード
を確認する 指定された例外パスの場合、フィールドによって返されるオブジェクトの__iter__
に問題のある行があることがわかります。 メソッド-ラッパークラスはラインターミネータを探しています。生の画像ファイルに、行末文字と比較できるものに変換できないバイトが含まれている可能性があることは確かにもっともらしいです。
HttpResponse
文字列として処理できるものが必要なだけです。イテレータを指定すると、一度にすべてが読み込まれて文字列が作成されるため、メモリを節約することはできません。
https://docs.djangoproject.com/en/ dev / ref / request-response /#passing-iterators
したがって、反復インターフェイスを経由せずに画像ファイルラッパーオブジェクトのコンテンツをプルするものが必要です。 読み取り メソッドはそれを行い、バイト数の引数を指定しない場合はファイルのコンテンツ全体をプルします。したがって、私が最初に試すことは次のとおりです。
return HttpResponse(get_image.read(), mimetype="image/png")
これはテストされていないので、何か見落としている可能性があります。
また、ホスティングWebサーバーに画像を処理させ、 URL
FileField
から返されます 。これには、ブラウザにどこを見ればよいかを伝えるための追加のHTTPラウンドトリップが含まれるため、どちらのアプローチが高速になるかについての普遍的なルールはないと思います。