Sorl-thumbnail: L'erreur d'échec de la balise miniature ne fournit aucun détail

Créé le 28 juil. 2016  ·  7Commentaires  ·  Source: jazzband/sorl-thumbnail

Parfois, je reçois des échecs comme celui-ci, mais ils ne fournissent aucun contexte quant à l'échec de l'image, ce qui rend difficile le débogage lorsqu'ils apparaissent occasionnellement sur un serveur Web occupé. Je ne sais pas pourquoi cela n'aurait pas été inclus à moins que dans ce wrapper ces détails (tels que le nom de fichier) n'étaient pas disponibles ?

[ERROR] Thumbnail tag failed  [thumbnail:84] 
Traceback (most recent call last): 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/templatetags/thumbnail.py", line 59, in render 
    return self._render(context) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/templatetags/thumbnail.py", line 137, in _render 
    thumbnail = get_thumbnail(file_, geometry, **options) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/shortcuts.py", line 8, in get_thumbnail 
    return default.backend.get_thumbnail(file_, geometry_string, **options) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/base.py", line 125, in get_thumbnail 
    thumbnail) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/base.py", line 157, in _create_thumbnail 
    image = default.engine.create(source_image, geometry, options) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/engines/base.py", line 20, in create 
    image = self.orientation(image, geometry, options) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/engines/base.py", line 45, in orientation 
    return self._orientation(image) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/engines/pil_engine.py", line 71, in _orientation 
    exif = image._getexif() 
  File "/app/.heroku/python/lib/python2.7/site-packages/PIL/JpegImagePlugin.py", line 390, in _getexif 
    return _getexif(self) 
  File "/app/.heroku/python/lib/python2.7/site-packages/PIL/JpegImagePlugin.py", line 418, in _getexif 
    info = TiffImagePlugin.ImageFileDirectory(head) 
  File "/app/.heroku/python/lib/python2.7/site-packages/PIL/TiffImagePlugin.py", line 274, in __init__ 
    raise SyntaxError("not a TIFF IFD") 

Tous les 7 commentaires

Pour tous ceux qui trouvent ce message d'erreur, j'ai également signalé un bogue avec Pillow avec cette erreur lors de l'obtention d'EXIF :

https://github.com/python-pillow/Pillow/issues/2043

@mariocesar Pouvez-vous recommander une solution ici ? Certains utilisateurs téléchargent des images sur mon site qui sont corrompues d'une manière ou d'une autre, et par la suite, cette erreur de journalisation apparaît tout le temps.

  1. Je veux plus d'informations comme le nom du fichier afin que je puisse diagnostiquer le problème. Comme c'est le cas, c'est un gâchis de comprendre ce qui s'est mal passé.
  2. Deuxièmement, je voudrais pouvoir détecter le problème via une exception. Pour cela, je pense que je devrais exercer un appel de niveau inférieur qui me donnerait en fait une valeur de résultat d'échec ou une exception.

@mariocesar S'il

Ouais, s'il te plait ! =D

Le problème était en fait un bogue dans le programme de filigrane que ces utilisateurs utilisaient, entraînant un EXIF ​​corrompu, et j'ai travaillé avec l'auteur pour résoudre ce problème.

La façon dont j'ai résolu ce problème était de toujours générer ces pouces dans le code (plutôt que dans le modèle) et de les envelopper dans un bloc try. De plus, j'ai un processus périodique qui essaie de générer les pouces plutôt que pendant le cycle de demande. S'il y a un problème avec l'image, je l'enregistre avec les informations nécessaires et supprime l'image afin que l'échec ne se reproduise plus.

    def get_thumbnail(self, dims, upscale=False, **options):
        """ Use sorl to produce the thumbnail; this also caches it for later.
        """
        from sorl.thumbnail import get_thumbnail as sorl_get_thumbnail
        try:
            return sorl_get_thumbnail(self.best_image(), dims, upscale=upscale, **options)
        except SyntaxError:
            # Only catch SyntaxError: not a tiff, otherwise, I had Heroku rebooting
            # and caused me to remove a good image.
            log.error("Problem generating thumbnail for #%s @ %s. Removed it. %s",
                    self.id, dims, self.best_image().url, exc_info=True)
            # Remove all images.
            self.image = ""
            self.save()
            return None

Fichier "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/engines/pil_engine.py", ligne 71, dans _orientation
exif = image._getexif()

`` python

def _orientation(self, image):
        try:
            exif = image._getexif()
        except (AttributeError, IOError, KeyError, IndexError):
            exif = None

        if exif:
            orientation = exif.get(0x0112)

            if orientation == 2:
                image = image.transpose(Image.FLIP_LEFT_RIGHT)
            elif orientation == 3:
                image = image.rotate(180)
            elif orientation == 4:
                image = image.transpose(Image.FLIP_TOP_BOTTOM)
            elif orientation == 5:
                image = image.rotate(-90).transpose(Image.FLIP_LEFT_RIGHT)
            elif orientation == 6:
                image = image.rotate(-90)
            elif orientation == 7:
                image = image.rotate(90).transpose(Image.FLIP_LEFT_RIGHT)
            elif orientation == 8:
                image = image.rotate(90)

        return image

pourquoi sauf (AttributeError, IOError, KeyError, IndexError) ?
nous avons une SyntaxError("not a TIFF IFD") , pas dans la liste des erreurs, c'est le bogue.
pourquoi pas juste sauf Exception ??
si vous ne pouvez pas obtenir exif, ignorez simplement, continuez.

d'accord, ils ont déjà supprimé le bogue.

    def _orientation(self, image):
        try:
            exif = image._getexif()
        except:
            exif = None
Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

uri-rodberg picture uri-rodberg  ·  11Commentaires

ghost picture ghost  ·  3Commentaires

tagmetag picture tagmetag  ·  7Commentaires

Flimm picture Flimm  ·  10Commentaires

dbrgn picture dbrgn  ·  14Commentaires