为什么我无法通过admin上传jpg文件到Django应用?

17 投票
9 回答
12401 浏览
提问于 2025-04-15 14:12

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

这是我的models.py文件:

class ImageMain(models.Model):
  product = models.ForeignKey(Product)
  photo = models.ImageField(upload_to='products')

在开发模式下,每次我通过Django后台上传图片时,总是收到这个提示:

上传一个有效的图片。你上传的文件要么不是图片,要么是损坏的图片。

我通过fink安装了libjpeg,然后在OS X 10.5.7上安装了PIL 1.1.6。

from PIL import Image
file = open('/Users/Bryan/work/review_app/media/lcdtvs/samsung_UN46B6000_front.jpg', 'r')
trial_image = Image.open(file)
trial_image.verify()

根据这个会话,jpg文件看起来是有效的。但是,它就是不加载。我尝试了其他的jpg文件,它们也不行。

可能出了什么问题呢?

我成功上传了一个png文件。

9 个回答

2

注意,如果你在Ubuntu上使用虚拟环境时遇到这个错误,这个帖子会很有帮助。

简单来说,Ubuntu把共享库安装在一些pip不知道的地方。通常,pip会在/usr/lib这个位置找系统库,但Ubuntu把它们放在/usr/lib/x86_64-linux-gnu,或者其他跟架构有关的地方。

短期解决办法就是把这些库的链接放到/usr/lib里:

sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/

这样做在我使用Ubuntu 12.04时解决了这个错误。

16

我在Ubuntu服务器上也遇到了同样的问题,你可以先安装libjpeg-dev,然后再安装PIL,这样就能解决了。

sudo apt-get install libjpeg-dev
sudo pip install PIL --upgrade

如果你已经在安装PIL之后安装了libjpeg-dev,那你可以先把PIL卸载掉,然后按照下面的步骤重新安装PIL。

sudo pip uninstall PIL
sudo apt-get install libjpeg-dev
sudo pip install PIL

这个方法对我有效,希望对你也有帮助。

16

你是在系统上安装PIL之后才安装libjpeg的吗?可能它找不到解码器。

我找到了一些关于如何让libjpeg和PIL在MacOS上顺利配合的步骤(看看最后的部分;看起来你可能需要明确设置解码器的目录):

http://djangodays.com/2008/09/03/django-imagefield-validation-error-caused-by-incorrect-pil-installation-on-mac/

撰写回答