3 votes

Comment Django détermine-t-il si une image téléchargée est valide ?

J'essaie d'ajouter des images à mes modèles dans mon application Django.

models.py

class ImageMain(models.Model):
"""This is the Main Image of the product"""
    product = models.ForeignKey(Product)
    photo = models.ImageField(upload_to='products')

En mode de développement, chaque fois que j'essaie de télécharger l'image via l'administration de Django, je continue à obtenir :

Upload a valid image. The file you uploaded was either not an image or a corrupted image.

Le fichier jpg que j'essaie de télécharger peut être visualisé avec os X Preview, il semble donc être valide.

Il semble que le problème soit que Python Imaging Library ne le reconnaisse pas comme une image. Pourquoi cela se produirait-il avec une image valide ?

PIL est installé, vérifié via le shell Django.

12voto

Nadia Alramli Points 40381

Selon le code source de Django. Ces trois lignes sont responsables de la vérification des images :

from PIL import Image
trial_image = Image.open(file)
trial_image.verify()

Le type d'image n'est peut-être pas pris en charge par l'IAP. Vérifiez la liste des formats pris en charge aquí

2voto

Thierry Lam Points 7888

Avez-vous essayé de télécharger un format d'image comme gif ou png ? Il se peut que votre PIL n'ait pas été construit avec la librairie jpeg correctement. J'ai eu un problème similaire avec Django sur Ubuntu. Si vous avez déjà vu le message d'erreur decoder jpeg not available vérifiez ceci lien . Ligne pertinente du lien :

$ cd libImaging
$ ./configure --with-jpeg=/somelib/lib --with-zlib=/somelib/lib

0voto

Christian Oudard Points 13461

J'ai regardé dans les sources de Django, dans django/forms/fields.py dans le ImageField classe. Django utilise effectivement le PIL pour déterminer si une image est valide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X