我的 Django 应用程序中有一个视图,它使用 PIL 自动创建图像,将其存储在 Nginx 媒体服务器中,并返回一个带有指向其 url 的 img 标签的 html 模板。
这工作正常,但我注意到一个问题。我每访问此视图 5 次,其中就有 1 次图像不会渲染。
我做了一些调查,发现了一些有趣的事情,这是图像正确渲染时的 HTTP 响应标头:
Accept-Ranges:bytes
Connection:keep-alive
Content-Length:14966
Content-Type:image/jpeg
Date:Wed, 18 Aug 2010 15:36:16 GMT
Last-Modified:Wed, 18 Aug 2010 15:36:16 GMT
Server:nginx/0.5.33
这是图像未加载时的标题:
Accept-Ranges:bytes
Connection:keep-alive
Content-Length:0
Content-Type:image/jpeg
Date:Wed, 18 Aug 2010 15:37:47 GMT
Last-Modified:Wed, 18 Aug 2010 15:37:46 GMT
Server:nginx/0.5.33
请注意,内容长度等于零。是什么导致了这种情况?关于如何进一步调试这个问题有什么想法吗?
Edit:当视图被调用时,它会调用模型的“draw”方法。这基本上就是它的作用(为了清楚起见,我删除了大部分代码):
def draw(self):
# Open/Creates a file
if not self.image:
(fd, self.image) = tempfile.mkstemp(dir=settings.IMAGE_PATH, suffix=".jpeg")
fd2 = os.fdopen(fd, "wb")
else:
fd2 = open(os.path.join(settings.SITE_ROOT, self.image), "wb")
# Creates a PIL Image
im = Image.new(mode, (width, height))
# Do some drawing
.....
# Saves
im = im.resize((self.get_size_site(self.width),
self.get_size_site(self.height)))
im.save(fd2, "JPEG")
fd2.close()
Edit2:这是网站:http://xxxcnn7979.hospedagemdesites.ws:8000/cartao/99/ http://xxxcnn7979.hospedagemdesites.ws:8000/cartao/99/
如果继续按 F5,右侧的图像最终将呈现。