【发布时间】:2012-04-24 14:56:29
【问题描述】:
我已成功使用 Play 1.2.4 为使用 renderBinary() 方法的用户提供大型二进制文件下载。
我想知道用户何时真正完成下载。一般来说,我知道这在某种程度上是可能的,因为我以前做过。在我网站的旧版本中,我编写了一个简单的 servlet,用于提供二进制文件下载。一旦该 servlet 完成了文件内容的写出,就会发送一个通知。当然不是完美的,但仍然有用。在我的测试中,它确实提供了用户下载文件所需时间的指示。
查看 Play 源代码,我发现 play.mvc.results.RenderBinary 类有一个方便的 apply() 方法,我可以使用它。我编写了自己的 RenderBinary 版本,因此可以在 apply() 方法写完文件内容后发送通知。
我发现的问题是对 response.out.write() 的调用显然会缓存传出字节(通过 Netty?),所以即使我正在写出几兆字节的数据,对 play.mvc.Http 的调用也是如此。 Response.out.write() 在几秒钟内完成,即使下载器需要几分钟才能下载文件。
我不介意编写自定义类,尽管我更喜欢使用现有的 Play 1.2.4 发行版。
关于如何在文件下载结束时向用户的浏览器推送通知的任何想法?
【问题讨论】:
标签: java playframework playframework-1.x