从django中的url保存图像并检查它是否是图像

时间:2011-04-17 02:55:28

标签: django django-views

我在视图中有以下代码:

from django.core.files.temp import NamedTemporaryFile

...

image_url = request.POST['url']
name = urlparse(image_url).path.split('/')[-1]
picture = Picture()
picture.user = request.user     
img_temp = NamedTemporaryFile(delete=True)
img_temp.write(urllib2.urlopen(image_url).read())
img_temp.flush()
picture.picture.save(name, File(img_temp))
picture.save()

工作正常,但我想确保“img_temp”实际上是一个图像。我怎样才能做到这一点?

修改

我找到了解决方案。这是一个名为imghdr的python模块,它对文件进行字节级验证,以查看它们是否为图像。它可以像这样使用:

from django.core.files.temp import NamedTemporaryFile
import imghdr

    image_url = request.POST['url']
    name = urlparse(image_url).path.split('/')[-1]
    picture = Picture()
    picture.user = request.user     
    img_temp = NamedTemporaryFile(delete=True)
    img_temp.write(urllib2.urlopen(image_url).read())
    img_temp.flush()        
    to_save = File(img_temp)
    to_save.open()
    extension = imghdr.what(to_save)
    if not extension in ['jpg', 'jpeg', 'png', 'gif']:
        to_save.close()
        return None
    picture.picture.save(name, to_save)
    foto.save()

如果您发现此代码中存在任何错误,请与我们联系。

2 个答案:

答案 0 :(得分:0)

img_temp = NamedTemporaryFile(delete=True)

- >它在Django 1.3中不起作用,而是使用:

img_temp = NamedTemporaryFile()

这行代码浪费了我2小时

答案 1 :(得分:-1)

为什么不验证image_url是否为图片?