Почему я не могу загрузить jpg файлы в свое приложение Django с помощью admin/?
Я пытаюсь добавить изображения в свои модели в своем приложении 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 действителен на основе этого сеанса. Однако он не загружается.
Я пробовал другие jpg, они тоже не работают.
Что может быть не так?
Мне удалось успешно загрузить файл png.
Ответы
Ответ 1
Вы установили libjpeg после того, как PIL уже был скомпилирован/установлен в системе? Может быть, он не может найти декодер должным образом?
Вот один набор инструкций, которые я нашел при получении libjpeg и PIL, хорошо играющих на MacOS (см. конец, похоже, вам может понадобиться явно установить каталог декодера):
http://djangodays.com/2008/09/03/django-imagefield-validation-error-caused-by-incorrect-pil-installation-on-mac/
Ответ 2
Я встретил ту же проблему на сервере 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
Это работает для меня, и надеюсь, что это сработает для вас.
Ответ 3
Обратите внимание: для тех, кто получает эту ошибку с помощью virtualenv на Ubuntu, это сообщение полезно.
В принципе, Ubuntu устанавливает общие объекты в местоположения, о которых не знает pip. В этом случае pip ожидает, что системные библиотеки будут в /usr/lib, но Ubuntu помещает их в /usr/lib/x 86_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.
Ответ 4
просто сделай
sudo easy_install PIL
это установит PIL, специфичный для ваших os.
убедитесь, что файл яйца, сгенерированный в /usr/local/lib/python 2.6/dist-packages/, содержит информацию о яйце (потому что, когда я сделал то же самое, файл яйца был неправильным). Если нет, просто переименуйте имя PIL-build-specific-name в PIL и добавьте файл PIL.pth в папку dist-packages. напишите PIL в файле PIL.pth, и вы закончите
Ответ 5
У меня была аналогичная проблема на Ubuntu 11.04. По-видимому, в Ubuntu 11 вам кажется, что вам нужен libjpeg8-dev, а не libjpeg или libjpeg62. Благодарю вас за сообщение Guillaumes http://gpiot.com/ubuntu-9-10-install-pil-in-virtualenv/
Ответ 6
У меня была эта проблема, хотя на Linux, а не на Mac, возможно, она не сможет дать слишком конкретную информацию.
Однако вам может понадобиться libjpeg-devel (если есть корреспондент для Mac).
Также убедитесь, что вы полностью очистите свою текущую установку PIL от системы. И после того, как вы убедитесь, что libjpeg установлен правильно, переустановите PIL с помощью build_ext -i. Затем запустите PIL selftest.py, чтобы проверить, не вызывает ли это ошибку JPEG.
Ответ 7
Django пытается импортировать PIL из папки с именем PIL
, но PIL устанавливается в папку под названием eg. 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, как описано здесь.
Ответ 8
'python -v', тогда 'import _imaging' полезен для определения того, откуда загружается _imaging.so. Если вы переустановите PIL, не очистив PIL-каталог в пакетах сайтов, вы все равно можете работать со старым _imaging.so в директории пакета Python. PIL selftest.py пройдет, потому что у вас есть новый _imaging.so в вашем каталоге сборки. И убедитесь, что вы отредактировали JPEG_ROOT в setup.py, чтобы получить правильные заголовки и .so каталогов во время сборки.
Ответ 9
У меня была аналогичная проблема, и я очистил ее со ссылкой ниже:
http://osqa.sjsoft.com/info/96/why-is-there-no-jpegpng-decoder-when-i-pip-install-pil-on-ubuntu