आप 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 राउंड ट्रिप शामिल होगा कि कहां देखना है, इसलिए मुझे नहीं लगता कि कोई सार्वभौमिक नियम है जिसके लिए दृष्टिकोण तेज होगा।