Předáváte hodnotu vrácenou FileField
image
přímo do odpovědi, jako by to byl řetězec nebo iterovatelný. Kontrola zdrojový kód
pro zadanou cestu výjimky vidíme, že objekt vrácený polem má ve svém __iter__
problematický řádek metoda - třída wrapper hledá zakončení řádků. Je jistě pravděpodobné, že soubor raw image by mohl obsahovat bajty, které nelze převést na něco, co lze porovnat se znaky zakončení řádku.
HttpResponse
potřebuje jen něco, co může považovat za řetězec - pokud tomu dáte iterátor, načte to všechno najednou a vytvoří řetězec, takže nejsou k dispozici žádné úspory paměti:
https://docs.djangoproject.com/en/ dev/ref/request-response/#passing-iterators
Takže potřebujete něco, co vytáhne obsah vašeho objektu obalu obrazu, aniž byste museli procházet iteračním rozhraním. přečíst Metoda to dělá a stahuje celý obsah souboru, pokud mu nezadáte argument počtu bajtů. Takže první věc, kterou bych zkusil, je:
return HttpResponse(get_image.read(), mimetype="image/png")
Toto není testováno, takže jsem mohl něco přehlédnout.
Můžete se také pokusit vytvořit profil jednoduššího případu, kdy necháte svůj hostingový webový server zpracovávat obrázky a pouze obsloužíte přesměrování na URL
vráceno z FileField
. To by vyžadovalo další okružní cestu HTTP, která by prohlížeči sdělila, kam se má podívat, takže si nemyslím, že existuje univerzální pravidlo pro to, který přístup bude rychlejší.