我创建了一个使用sorl-thumbnail来调整上传图像大小的网站。大多数图像都没有任何问题调整大小,但很少有人收到以下错误:
Caught IOError while rendering: not enough data
Request Method: GET
Request URL: http://localhost:8000/user/nash22/photographs/
Django Version: 1.3.1
Exception Type: TemplateSyntaxError
Exception Value:
Caught IOError while rendering: not enough data
Exception Location: /usr/local/lib/python2.7/site-packages/PIL/TiffImagePlugin.py in load, line 382
Python Executable: /usr/local/bin/python
Python Version: 2.7.1
我在谷歌搜索但找不到任何相关答案。有人可以帮我解决发生的事情以及如何解决这个问题?谢谢。
完成追溯
追踪(最近一次呼叫最后一次):
文件 " /lib/python2.7/django/core/handlers/base.py" ;, 第111行,在get_response response = callback(request, * callback_args,** callback_kwargs)
文件 " /home/swaroop/project/apps/photography/views.py" ;, 第702行,在showPhoto context_instance = RequestContext(request))
文件 " /lib/python2.7/django/shortcuts/的初始化的.py&#34 ;, 第20行,在render_to_response中返回 HttpResponse(loader.render_to_string(* args,** kwargs), ** httpresponse_kwargs)
文件 " /lib/python2.7/django/template/loader.py" ;, 第188行,在render_to_string中返回t.render(context_instance)
文件 " /lib/python2.7/django/template/base.py" ;, 第123行,在渲染中返回self._render(context)
文件 " /lib/python2.7/django/template/base.py" ;, 第117行,在_render中返回self.nodelist.render(context)
文件 " /lib/python2.7/django/template/base.py" ;, 第744行,在render bits.append(self.render_node(node,context))
文件 " /lib/python2.7/django/template/base.py" ;, 第757行,在render_node中返回node.render(context)
文件 " /lib/python2.7/django/template/loader_tags.py" ;, 第127行,在渲染中返回compiled_parent._render(context)
文件 " /lib/python2.7/django/template/base.py" ;, 第117行,在_render中返回self.nodelist.render(context)
文件 " /lib/python2.7/django/template/base.py" ;, 第744行,在render bits.append(self.render_node(node,context))
文件 " /lib/python2.7/django/template/base.py" ;, 第757行,在render_node中返回node.render(context)
文件 " /lib/python2.7/django/template/loader_tags.py" ;, 第64行,在render result = block.nodelist.render(context)
文件 " /lib/python2.7/django/template/base.py" ;, 第744行,在render bits.append(self.render_node(node,context))
文件 " /lib/python2.7/django/template/base.py" ;, 第757行,在render_node中返回node.render(context)
文件 " /lib/python2.7/sorl/thumbnail/templatetags/thumbnail.py" ;, 第45行,在渲染中返回self._render(context)
文件 " /lib/python2.7/sorl/thumbnail/templatetags/thumbnail.py" ;, 第97行,渲染文件,几何,**选项
File" /lib/python2.7/sorl/thumbnail/base.py" ;,第61行, 在get_thumbnail thumbnail)
File" /lib/python2.7/sorl/thumbnail/base.py" ;,第86行, in _create_thumbnail image = default.engine.create(source_image, 几何,选项)
文件" /lib/python2.7/sorl/thumbnail/engines/base.py", 第15行,在create image = self.orientation(图像,几何, 选项)
文件" /lib/python2.7/sorl/thumbnail/engines/base.py", 第26行,在方向上返回self._orientation(图像)
文件 " /lib/python2.7/sorl/thumbnail/engines/pil_engine.py" ;, 第29行,在_orientation exif = image._getexif()
File" /usr/local/lib/python2.7/site-packages/PIL/JpegImagePlugin.py", 第381行,在_getexif info.load(file)
中File" /usr/local/lib/python2.7/site-packages/PIL/TiffImagePlugin.py", 第382行,在加载IOError中,"没有足够的数据"
IOError:数据不够
答案 0 :(得分:6)
更新
据称,{p>image._getexif
具有很高的实验性。参考sorl-thumbnail和issue #98,您可以将代码更新为
def _orientation(self, image):
try:
exif = image._getexif()
except (AttributeError, IOError):
exif = None
这是由PIL尝试加载已损坏或可能不受支持的TIFF文件引起的
通常当您使用forms.ImageField
时,Django会检查上传图像的正确性
因此,您需要:
forms.ImageField
models.ImageField
的默认设置,以便在您的视图中处理上传通过
检查上传的图片from PIL import Image
Image.open(path).load()
此外,您可以限制用户上传普通格式,例如jpeg / png / gif而不是TIFF