Почему я не могу загрузить файлы jpg в приложение Django через admin /? - PullRequest
17 голосов
/ 10 сентября 2009

Я пытаюсь добавить изображения к своим моделям в приложении Django.

models.py

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

В режиме разработки, каждый раз, когда я пытаюсь загрузить изображение через администратора Django, я получаю:

Загрузить действительное изображение. Загруженный файл не был изображением или искаженное изображение.

Я установил libjpeg через fink, а затем установил PIL 1.1.6 на ox X 10.5.7

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 действителен на основе этого сеанса. Тем не менее, он не загружается. Я пробовал другие jpgs, они тоже не работают.

Что может быть не так?

Мне удалось успешно загрузить PNG-файл.

Ответы [ 9 ]

16 голосов
/ 06 декабря 2010

Я столкнулся с той же проблемой на сервере Ubuntu, затем вы можете это исправить, установив libjpeg-dev перед PIL.

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

и если вы уже установили libjpeg-dev после PIL. затем вы можете сначала удалить PIL и попытаться переустановить PIL следующим образом.

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

Это работает для меня, и надеюсь, что это работает для вас.

16 голосов
/ 10 сентября 2009

Вы установили libjpeg после того, как PIL уже был скомпилирован / установлен в системе? Может быть, он не может правильно найти декодер?

Вот один из инструкций, которые я нашел для того, чтобы libjpeg и PIL хорошо играли на MacOS (смотрите ближе к концу; похоже, вам может понадобиться явно установить dir декодера):

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

2 голосов
/ 24 октября 2012

Обратите внимание, что для тех, кто получает эту ошибку с virtualenv в 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.

1 голос
/ 23 июня 2012

У меня была похожая проблема в Ubuntu 11.04. Очевидно, в Ubuntu 11 кажется, что вам нужен libjpeg8-dev, а не libjpeg или libjpeg62. Спасибо за сообщение Гийома http://gpiot.com/ubuntu-9-10-install-pil-in-virtualenv/

1 голос
/ 21 апреля 2010

просто делай
sudo easy_install PIL

это установит PIL, специфичный для вашей ОС. пожалуйста, убедитесь, что файл яйца, сгенерированный в /usr/local/lib/python2.6/dist-packages/, содержит информацию о яйце (потому что когда я делал то же самое, файл яйца был неправильным) Если нет, просто переименуйте PIL-build-specific-name в PIL и добавьте файл PIL.pth в папку dist-packages. запишите PIL в файл PIL.pth и все готово

0 голосов
/ 25 октября 2013

У меня была похожая проблема, и я очистил ее, перейдя по ссылке ниже:

http://osqa.sjsoft.com/questions/96/why-is-there-no-jpegpng-decoder-when-i-pip-install-pil-on-ubuntu

0 голосов
/ 09 апреля 2012

'python -v' затем 'import _imaging' полезен для выяснения, откуда загружается _imaging.so. Если вы переустанавливаете PIL без очистки каталога PIL в пакетах сайта, возможно, вы по-прежнему используете старый _imaging.so в каталоге пакетов Python. Файл selftest.py в PIL пройдет, потому что у вас есть новый _imaging.so в вашей директории сборки. И обязательно отредактируйте JPEG_ROOT в setup.py, чтобы выбрать правильный заголовок и каталоги .so во время сборки.

0 голосов
/ 02 сентября 2011

Django пытается импортировать PIL из папки с именем PIL, но PIL устанавливается в папку с именем, например. PIL-1.1.7-py2.6-macosx-10.6-universal.egg, поэтому импорт не выполняется - какой Django (или PIL?), По-видимому, интерпретирует как испорченное изображение.

Простая символическая ссылка

host:~ user$ cd /Library/Python/2.6/site-packages
host:site-packages user$ ln -vis PIL-1.1.7-py2.6-macosx-10.6-universal.egg PIL
create symbolic link `PIL' to `PIL-1.1.7-py2.6-macosx-10.6-universal.egg'

исправил это для меня на Mac OSX 10.6.x MBP. На машинах Linux вместо этого папка может называться dist-packages и находиться под /usr/lib/python/ или около того, но идея та же.

Часто вы можете найти папку, в которую обычно устанавливаются модули Python, как описано здесь .

0 голосов
/ 10 сентября 2009

У меня была эта проблема, хотя на Linux, а не на Mac, поэтому, возможно, не удастся дать слишком конкретную информацию. Однако вам также может понадобиться libjpeg-devel (если есть корреспондент для Mac).

Также обязательно полностью удалите текущую установку PIL из системы. И после того, как вы убедитесь, что libjpeg установлен правильно, переустановите PIL с помощью build_ext -i. Затем запустите PIL-файл selftest.py, чтобы проверить, дает ли он ошибку JPEG.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...