2010-05-06 81 views
2

我仍在努力达到Stream a file to the HTTP response in Pylons。除了原始问题之外,我发现我无法返回Content-Length标题,因此对于大型文件,客户端无法估计下载将花费多长时间。我已经试过内容长度标题未从标语响应返回

response.content_length = 12345 

和我试图

response.headers['Content-Length'] = 12345 

在两种情况下的HTTP响应(在提琴手观察)根本不包含的Content-Length头。我如何让Pylons返回这个头文件?

(哦,如果你有使它流的文件请回复到原来的问题任何想法 - 我所有的想法在那里。)

编辑:而不是一个通用的解决方案,用于提供静态文件FileApp allows sending the Content-Length header。对于动态内容,它看起来像Alex Martelli的答案是唯一的选择。

回答

1

有一些中间件代码here可确保所有响应都会在缺少内容长度标题时获得内容长度标题。您可以调整它,以便在响应中设置其他标题(如'X-The-Content-Length'),并且中间件使用它来使内容长度(如果后者不存在)。我认为整个事情是一个解决方案,我认为这是一个塔架bug(它对内容长度的傲慢态度!),但显然塔架作者在该分数上不同意我的看法,所以很高兴至少有解决方法! - )

+0

谢谢,亚历克斯,中间件作品的那一点。我甚至不需要修改它 - 因为无论如何我无法让“流式传输”工作,调用'len(body)'返回正确的值。不过,我不确定为什么这么简单的事情需要一些“中间件”。 恭喜击中100K,顺便说一句! – EMP 2010-05-06 04:20:02

+0

@evgeny,如果你能说服Pylons的提交者说内容的长度应该总是被返回,你就会赢得包括我在内的每个人的感激 - 但看起来他们还是相信了。感谢恭喜! - ) – 2010-05-06 04:23:40

+0

好吧,不要介意“永远”,但至少如果我手动将它设置在标题中它应该被返回! – EMP 2010-05-06 23:01:35

0

尝试:

response.headerlist.append((str("Content-Length"), str(" 123456"))) 
+0

不,那不行,对不起。 – EMP 2010-05-06 03:58:42