2010-06-09 25 views
32

我只需要将图像安全地提供给经过验证的用户(即,它们不能作为静态文件提供)。我目前在我的Django项目中拥有以下Python视图,但效率不高。任何想法更好的方法?将图像写入Django的最佳方法HttpResponse()

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

(图片由PIL进口。)

+2

由于Santia说:“如果你有一个较新版本的Django的试试这个(像我一样...)作为Django的1.7,关键字MIME类型更名为CONTENT_TYPE对'的HttpResponse( )'“ – kenorb 2015-05-29 11:46:24

回答

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 2013-04-18 22:55:05

+2

要确定文件的MIME类型,可以使用[python-magic](https://github.com/ahupp/python-magic)。 – Arjan 2013-04-29 13:14:54

+14

'mimetype'在Django 1.5中已弃用,[此选项现在称为'content_type'](https://docs.djangoproject.com/en/1.5/ref/request-response/#django.http.HttpResponse.__init__) 。 – bjacobel 2014-10-09 04:44:01

相关问题