Подтвердить что ты не робот

Почему я не могу загрузить 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.

4b9b3361

Ответ 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 каталогов во время сборки.