Django如何判断上传的图片是否有效?

3 投票
3 回答
7869 浏览
提问于 2025-04-15 14:01

我正在尝试在我的Django应用中给模型添加图片。

这是我的模型文件(models.py):

class ImageMain(models.Model):
"""This is the Main Image of the product"""
    product = models.ForeignKey(Product)
    photo = models.ImageField(upload_to='products')

在开发模式下,每次我通过Django后台上传图片时,总是会出现以下错误:

Upload a valid image. The file you uploaded was either not an image or a corrupted image.

我尝试上传的jpg图片在os X的预览中可以正常查看,所以看起来是有效的。

问题似乎出在Python图像库(PIL)没有把它识别为一张图片。为什么一个有效的图片会出现这种情况呢?

PIL已经安装,并通过Django的命令行确认过了。

3 个回答

0

我查看了Django的源代码,在django/forms/fields.py文件里,找到了ImageField这个类。Django确实使用了PIL这个库来判断一张图片是否有效。

2

你有没有试过上传像gif或png这样的图片格式?可能是因为你的PIL(Python图像库)没有正确安装jpeg库。我在Ubuntu上用Django的时候也遇到过类似的问题。如果你见过错误信息decoder jpeg not available,可以查看这个链接。链接中的相关内容如下:

$ cd libImaging
$ ./configure --with-jpeg=/somelib/lib --with-zlib=/somelib/lib
12

根据Django的源代码,这三行代码是用来验证图片的:

from PIL import Image
trial_image = Image.open(file)
trial_image.verify()

这个图片的类型可能是PIL不支持的。你可以在这里查看支持的格式列表。

撰写回答