2009-09-09 11 views
17

Estoy tratando de agregar imágenes a mis modelos en mi aplicación Django.¿Por qué no puedo cargar archivos jpg en mi aplicación Django a través de admin /?

models.py

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

En el modo de desarrollo, cada vez que intento subir la imagen a través de Django admin, me siguen dando:

subir una imagen válida. El archivo que cargó no era una imagen o una imagen dañada.

He instalado libjpeg a través de Fink y después se instala en PIL 1.1.6 buey 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() 

Parece que el jpg es válido basado en esa sesión. Sin embargo, no se carga. He intentado otros jpgs, tampoco funcionan.

Qué podría ir mal?

que era capaz de cargar correctamente un archivo PNG.

Respuesta

17

¿Ha instalado libjpeg después PIL ya fue compilado/instalado en el sistema? Tal vez no puede encontrar el decodificador correctamente?

Aquí hay una serie de instrucciones que se encontró en conseguir libjpeg y PIL jugando muy bien en MacOS (ver hacia el final; se ve como es posible que tenga que establecer explícitamente el directorio del decodificador):

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

+0

hice instalar libjpeg primero. – BryanWheelock

0

Tuve este problema, aunque en Linux no Mac, por lo que podría no ser capaz de dar información demasiado específica. Sin embargo, es posible que también necesite libjpeg-devel (si hay un corresponsal para Mac).

Asimismo, asegúrese de purgar la instalación de PIL actual por completo del sistema. Y cuando esté seguro de que libjpeg está instalado correctamente, vuelva a instalar PIL con build_ext -i. A continuación, ejecute selftest.py de PIL para comprobar si proporciona el error JPEG.

1

Eso sí,
sudo easy_install PIL

esto instalará PIL específico para su sistema operativo. por favor asegúrese de que el archivo generado en el huevo /usr/local/lib/python2.6/dist-packages/ está teniendo la información de huevo (porque cuando lo hice lo mismo, archivo de huevo no era correcta). Si no, simplemente cambie el nombre de PIL-build-specific-name a PIL y agregue un archivo PIL.pth en la carpeta dist-packages. PIL escribir en el archivo PIL.pth y ya está

16

me encontré con el mismo problema en el servidor de Ubuntu, entonces se puede solucionar el problema instalando libjpeg-dev antes de PIL.

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

y si ya ha instalado libjpeg-dev después de PIL. luego puede eliminar PIL primero e intentar reinstalar PIL de la siguiente manera.

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

Funciona para mí, y espero que funcione para usted.

+0

También tenía instalada una almohada y tuve que desinstalar/reinstalar después de instalar libjpeg-dev. – stephendwolff

+0

Esto no funcionó para mí. Incluso con libjpeg-dev instalado, la creación de PIL en un virtualenv sigue informando que "el soporte de JPEG no está disponible". – Cerin

+0

¡Muchas gracias! Este error me estaba volviendo loco. La última versión de PIL, lee el mismo archivo jpeg del archivo perfectamente, ¡pero de ninguna manera de StringIO! Tu receta lo curó de una vez. –

0

Django intenta importar PIL de una carpeta llamada PIL, pero PIL se instala en una carpeta llamada p. PIL-1.1.7-py2.6-macosx-10.6-universal.egg, por lo que la importación falla, ¿qué Django (o PIL?) Parece interpretar como una imagen dañada.

Un simple enlace simbólico

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' 

ha fijado esto para mí en un Mac OS X 10.6.x MBP. En máquinas Linux, la carpeta podría llamarse dist-packages y estar debajo de /usr/lib/python/, pero la idea es la misma.

A menudo puede encontrar la carpeta donde los módulos de python se instalan generalmente como se describe here.

0

'python -v' then 'Import _imaging' es útil para averiguar de dónde se carga _imaging.so. Si reinstala PIL sin limpiar el directorio PIL en paquetes de sitio, es posible que aún se esté ejecutando con un _imaging.so antiguo bajo el directorio de paquete de Python. El autotest.py de PIL pasará, porque tienes un _imaging.so nuevo en tu directorio de compilación. Y asegúrese de editar JPEG_ROOT en setup.py para seleccionar los directorios correctos del encabezado y .so en tiempo de compilación.

2

Nota, para cualquiera que obtenga este error con un virtualenv en Ubuntu, la publicación this es útil.

Básicamente, Ubuntu instala objetos compartidos en ubicaciones que pip desconoce. En este caso, pip espera que las bibliotecas del sistema estén en/usr/lib, pero Ubuntu las coloca en/usr/lib/x86_64-linux-gnu, o en alguna otra ubicación dependiente de la arquitectura.

La solución a corto plazo es simplemente simbólicamente los directorios bibliotecas en/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/ 

que esto esté arreglado el error para mí en Ubuntu 12.04.

Cuestiones relacionadas