为什么我无法通过admin上传jpg文件到Django应用?
我正在尝试在我的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上顺利配合的步骤(看看最后的部分;看起来你可能需要明确设置解码器的目录):