2010-06-09 11 views
32

पर एक छवि लिखने का सबसे अच्छा तरीका मुझे केवल मान्य उपयोगकर्ताओं को सुरक्षित रूप से छवियों की सेवा करने की आवश्यकता है (यानी उन्हें स्थैतिक फाइलों के रूप में नहीं दिया जा सकता है)। मेरे पास वर्तमान में मेरे Django प्रोजेक्ट में निम्न पायथन दृश्य है, लेकिन यह अक्षम लगता है। बेहतर तरीके से कोई विचार?एक Django HttpResponse()

def secureImage(request,imagePath): 
    response = HttpResponse(mimetype="image/png") 
    img = Image.open(imagePath) 
    img.save(response,'png') 
    return response 

(छवि जनहित याचिका से आयात किया जाता है।)

+2

रूप Santia टिप्पणी की: "मामले में आप इस Django का नवीनतम संस्करण के साथ (के रूप में मैंने किया था ...) की कोशिश Django 1.7 के रूप में, कीवर्ड माइम प्रकार (HttpResponse' के लिए CONTENT_TYPE को नाम दिया गया था) ' – kenorb

उत्तर

62

ठीक है, फिर से एन्कोडिंग कभी कभी जरूरत है, लेकिन अधिकांश मामलों में सरल के लिए (मूल अछूता रखते हुए यानी एक छवि पर एक वॉटरमार्क लागू करने) आप उपयोग कर सकते हैं:

try: 
    with open(valid_image, "rb") as f: 
     return HttpResponse(f.read(), content_type="image/jpeg") 
except IOError: 
    red = Image.new('RGBA', (1, 1), (255,0,0,0)) 
    response = HttpResponse(content_type="image/jpeg") 
    red.save(response, "JPEG") 
    return response 
+13

मेरे भगवान, अगर मैं कर सकता, तो मैं आपको एक बियर खरीदूंगा। – Nielsvh

+2

फ़ाइल के एमआईएमई प्रकार को निर्धारित करने के लिए, आप [पायथन-जादू] (https://github.com/ahupp/python-magic) का उपयोग कर सकते हैं। – Arjan

+14

'mimetype' को Django 1.5 में बहिष्कृत किया गया था, [इस विकल्प को अब' content_type' 'कहा जाता है] (https://docs.djangoproject.com/en/1.5/ref/request-response/#django.http.HttpResponse.__init__) । – bjacobel

संबंधित मुद्दे