通过Struts动作下载文件会暂停一段时间

时间:2013-01-31 14:39:37

标签: servlets struts liferay liferay-6 document-library

我目前正在使用Liferay服务器进行开发。

[liferay-portal-6.1.10-ee-ga1 + tomcat-7.0.25]

在某些情况下,我的用户从文档库中下载文件。

当他们使用以下类型的网址

时会发生什么
[$LIFERAY_HOST]/c/document_library/get_file?uuid=[$OBNOXIOUSLY_LONG_UUID]&groupId=[$MY_GROUP_ID]

文件下载需要很长时间才能结束。

事实上,下载本身并不需要花费更多时间。但似乎答案没有结束。

大多数下载客户端(包括Firefox,wget,wireshark ......)似乎都没有注意到响应的结束。

结果是他们因没有实际的正当理由而挂起。

最糟糕的是,我的Firefox用户的印象是他们的下载时间非常短(例如8kb的20秒... ...说得对,这是不可接受的。)

我试图深入挖掘堆栈并查看liferay的来源,但我无法确定延迟的来源。

我试图查看这个帖子的方式(看起来很有前途)https://www.liferay.com/community/forums/-/message_boards/message/11838689

但这并不适用于我的问题。我强制所有过滤器类都吐出日志消息,它们似乎都在几毫秒内完成(最多只有一秒)。

我试图检查httpservletrequest的输出流冲洗和关闭,它们都被正确而干净地执行......我开始失去对自己的希望和信念......我很伤心,我感到很脏,我需要咖啡。 .. 请帮帮我 !

----编辑:回答----

实际上我的问题与GZip过滤器有关(在我第一次尝试的时候没有发现。 在我的确切版本rp的答案不是实际的解决方案,但它是在很多关闭版本。 如果你遇到同样的问题,请点击rp的答案(下面的)或者这个:

www.liferay.com/community/forums/-/message_boards/message/21186157#_19_message_21215343

1 个答案:

答案 0 :(得分:1)

不幸的是,这是Liferay的一个问题。搜索Liferay错误跟踪器后,我发现LPS-29323的描述与您的描述相符。

幸运的是,修复似乎很简单。

您可以查看pull request that fixes the issue或将这些行添加到WEB-INF\liferay-web.xml

<filter-mapping>
    <filter-name>ETag Filter</filter-name>
    <url-pattern>^(/c/document_library/get_file|/c/message_boards/get_message_attachment|/c/wiki/get_page_attachment)(\?.*)?$</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>