Вие предавате стойността, върната от FileField
image
директно в отговора, сякаш е низ или итерируем. Проверка на изходния код
за дадения път на изключение, виждаме, че обектът, върнат от полето, има нарушаващия ред в своя __iter__
метод - класът обвивка търси терминатори на редове. Със сигурност е правдоподобно, че необработеният файл с изображение може да съдържа байтове, които не могат да бъдат преобразувани в нещо, което може да се сравни със знаците за край на реда.
HttpResponse
просто се нуждае от нещо, което може да третира като низ - ако му дадете итератор, той го чете целия наведнъж и създава низ, така че няма налични спестявания на памет:
https://docs.djangoproject.com/en/ dev/ref/request-response/#passing-iterators
Така че имате нужда от нещо, което ще изтегли съдържанието на вашия обект за обвивка на файл с изображение, без да преминавате през интерфейса за итерация. прочетете прави това, като изтегля цялото съдържание на файла, ако не му дадете аргумент брой байтове. Затова първото нещо, което бих опитал е:
return HttpResponse(get_image.read(), mimetype="image/png")
Това не е тествано, така че може да съм пропуснал нещо.
Можете също да опитате да профилирате по-простия случай да оставите вашия хостинг уеб сървър да обработва изображенията и просто да обслужва пренасочване към URL
върнат от FileField
. Това би включвало допълнително HTTP двупосочно пътуване, за да каже на браузъра къде да търси, така че не мисля, че има универсално правило за това кой подход ще бъде по-бърз.