Anda meneruskan nilai yang dikembalikan oleh FileField
image
langsung ke respons seolah-olah itu adalah string atau iterable. Memeriksa kode sumber
untuk jalur pengecualian yang diberikan, kita melihat bahwa objek yang dikembalikan oleh bidang memiliki baris yang menyinggung di __iter__
-nya metode - kelas pembungkus sedang mencari terminator baris. Jelas masuk akal bahwa file gambar mentah dapat berisi byte yang tidak dapat dikonversi menjadi sesuatu yang dapat dibandingkan dengan karakter terminator baris.
HttpResponse
hanya membutuhkan sesuatu yang dapat diperlakukan sebagai string - jika Anda memberinya iterator, ia membaca semuanya sekaligus dan membuat string, jadi tidak ada penghematan memori yang tersedia:
https://docs.djangoproject.com/en/ dev/ref/request-response/#passing-iterators
Jadi, Anda memerlukan sesuatu yang akan menarik konten objek pembungkus file gambar Anda tanpa melalui antarmuka iterasi. baca metode melakukan itu, menarik seluruh konten file jika Anda tidak memberikan argumen sejumlah byte. Jadi, hal pertama yang saya coba adalah:
return HttpResponse(get_image.read(), mimetype="image/png")
Ini belum diuji, jadi saya mungkin mengabaikan sesuatu.
Anda juga dapat mencoba membuat profil kasus yang lebih sederhana dengan membiarkan server web hosting Anda menangani gambar, dan hanya melayani pengalihan ke URL
dikembalikan dari FileField
. Itu akan melibatkan perjalanan bolak-balik HTTP tambahan untuk memberi tahu browser ke mana harus mencari, jadi menurut saya tidak ada aturan universal untuk pendekatan mana yang akan lebih cepat.