2
我在一个视图下面的代码:保存图像,并检查是否it's图像
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”实际上是一个是图片。我怎样才能做到这一点?
编辑:
从来就找到了解决办法。 Theres中的一个模块叫做imghdr,它对文件进行字节级别的验证,看它们是否为图像。它可以这样使用:
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()
请让我知道如果你看到这段代码中的任何错误。
因为那只是一个字符串。人们可以通过追加'.jpg' – fceruti 2011-04-17 03:23:01
耶存储恶意脚本。但是,有人可以将带有.jpg扩展名的垃圾文件。 您需要使用PIL进行验证。 – A3R 2011-04-17 07:47:03