我在视图中有以下代码:
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()
如果您发现此代码中存在任何错误,请与我们联系。
答案 0 :(得分:0)
img_temp = NamedTemporaryFile(delete=True)
- >它在Django 1.3中不起作用,而是使用:
img_temp = NamedTemporaryFile()
这行代码浪费了我2小时
答案 1 :(得分:-1)
为什么不验证image_url
是否为图片?