2017-06-04 18 views
2

我用枕头4.1.1使用Python 2.7/1.9的Django枕头返回错误:“IO错误:图像文件被截断(6个字节不处理)”

我有几十个十万用户上传图片的我网站和我使用枕头从模板生成缩略图。

例如为:

{% thumbnail apicture.file "1200x350" crop="center" as im %} 
    <img src="{{ im.url }}" width=100%> 
{% endthumbnail %} 

这是工作得很好,直到这个星期。 Django的现在显示此错误:计算器上发现

IOError: image file is truncated (6 bytes not processed) 

解决方案不起作用,因为它们都适用于意见,而不是模板(例如ImageFile.LOAD_TRUNCATED_IMAGES = TRUE)。

有没有简单的方法来识别哪些图片产生这个错误?如何解决这个错误?

以下是完整的回溯:

Internal Server Error: /trip/province-dublin-2034 
Traceback (most recent call last): 
    File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs)  
    File "C:\Terradiem\terradiem\trip\views.py", line 300, in trip 
    return render(request, 'trip/results.html', qsall) 
    File "C:\Python27\lib\site-packages\django\shortcuts.py", line 67, in render template_name, context, request=request, using=using) 
    File "C:\Python27\lib\site-packages\django\template\loader.py", line 97, in render_to_string 
    return template.render(context, request) 
    File "C:\Python27\lib\site-packages\django\template\backends\django.py", line 95, in render 
    return self.template.render(context) 
    File "C:\Python27\lib\site-packages\django\template\base.py", line 206, in render 
    return self._render(context) 
    File "C:\Python27\lib\site-packages\django\test\utils.py", line 92, in instrumented_test_render 
    return self.nodelist.render(context) 
    File "C:\Python27\lib\site-packages\django\template\base.py", line 992, in render 
    bit = node.render_annotated(context) 
    File "C:\Python27\lib\site-packages\django\template\base.py", line 959, in render_annotated 
    return self.render(context) 
    File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 220, in render 
    nodelist.append(node.render_annotated(context)) 
    File "C:\Python27\lib\site-packages\django\template\base.py", line 959, in render_annotated 
    return self.render(context) 
    File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 220, in render 
    nodelist.append(node.render_annotated(context)) 
    File "C:\Python27\lib\site-packages\django\template\base.py", line 959, in render_annotated 
    return self.render(context) 
    File "C:\Python27\lib\site-packages\django\template\defaulttags.py", line 326, in render 
    return nodelist.render(context) 
    File "C:\Python27\lib\site-packages\django\template\base.py", line 992, in render 
    bit = node.render_annotated(context) 
    File "C:\Python27\lib\site-packages\django\template\base.py", line 959, in render_annotated 
    return self.render(context) 
    File "C:\Python27\lib\site-packages\sorl\thumbnail\templatetags\thumbnail.py", line 59, in render 
    return self._render(context) 
    File "C:\Python27\lib\site-packages\sorl\thumbnail\templatetags\thumbnail.py", line 137, in _render 
    thumbnail = get_thumbnail(file_, geometry, **options) 
    File "C:\Python27\lib\site-packages\sorl\thumbnail\shortcuts.py", line 8, in get_thumbnail 
    return default.backend.get_thumbnail(file_, geometry_string, **options) 
    File "C:\Python27\lib\site-packages\sorl\thumbnail\base.py", line 125, in get_thumbnail 
    thumbnail) 
    File "C:\Python27\lib\site-packages\sorl\thumbnail\base.py", line 157, in _create_thumbnail 
    image = default.engine.create(source_image, geometry, options) 
    File "C:\Python27\lib\site-packages\sorl\thumbnail\engines\base.py", line 21, in create 
    image = self.colorspace(image, geometry, options) 
    File "C:\Python27\lib\site-packages\sorl\thumbnail\engines\base.py", line 53, in colorspace 
    return self._colorspace(image, colorspace) 
    File "C:\Python27\lib\site-packages\sorl\thumbnail\engines\pil_engine.py", line 101, in _colorspace 
    return image.convert('RGB') 
    File "C:\Python27\lib\site-packages\PIL\Image.py", line 844, in convert 
self.load() 
    File "C:\Python27\lib\site-packages\PIL\ImageFile.py", line 226, in load 
"(%d bytes not processed)" % len(b)) 
IOError: image file is truncated (6 bytes not processed) 

谢谢

+0

很可能,所讨论图像的标题包含关于内容长度的错误信息(可能已损坏)。您可以通过显式捕获和处理该错误来解决这个问题,可能同时从头部测试内容长度信息。 – jbndlr

+0

只要在您的django应用程序中尽早找到'ImageFile.LOAD_TRUNCATED_IMAGES = True'。 – lepsch

回答

2

好吧,我得到了答案,以我自己的问题!

正如评论说lepsch,只需添加

from PIL import Image, ImageFile ImageFile.LOAD_TRUNCATED_IMAGES = True

早期有可能在Django应用程序。我将它添加到生成页面的视图中,并且它工作正常。