如何检查上传的文件是否是Django中的有效图像

时间:2017-01-17 07:20:19

标签: django

我的一个模型中有一个ImageField,以便用户可以上传图像。当用户提交上传表单时,我想验证相关文件是否是完全有效且可显示的图像。

我尝试使用PIL验证图像实际上是真实的,但使用

from PIL import Image
Image.open(model.file)
Image.verify()

不管我给它的文件是什么,它总是抛出异常。

任何人都知道验证文件的简单方法吗?

4 个答案:

答案 0 :(得分:4)

好消息,你不需要这样做:

  

类ImageField(upload_to =无,height_field =无,width_field =无,max_length = 100,**选项)

     

继承FileField中的所有属性和方法,但也验证上传的对象是有效图像。

https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ImageField

答案 1 :(得分:1)

此外,您应该使用verify(),如下所示:

{{1}}

答案 2 :(得分:0)

if 'image' in request.FILES['image'].content_type:
    # Some code
else:
    # the file is not image

ImageField未创建表单时,form.py不起作用

实际上,如果我们上传的不是图像文件,然后将其保存在图像字段中,则不会出现任何错误,因此,在保存之前必须检查文件的content_type

答案 3 :(得分:0)

在将图像/数据插入数据库或在需要的位置使用它之前,您可以将“枕头”与“尝试,除了”块一起使用”

就像我下面的示例一样,提交票证支持表单“ view.py”文件:

from PIL import Image
    
    if request.method=='POST':
       # check if attachment file is not empty inside try/except to pass django error.
        try:
            ticket_attachmet_image = request.FILES["q_attachment_image"]
        except:
            ticket_attachmet_image = None

       # check if uploaded image is valid (for example not video file ) .
        if not ticket_attachmet_image == None:
            try:
                Image.open(ticket_attachmet_image)
            except:
                messages.warning(request, 'sorry, your image is invalid')
                return redirect('your_url_name')

#done。