我成功使用Play 1.2.4向使用renderBinary()方法的用户提供大型二进制文件下载。在Play框架中完成文件下载时的通知
我想知道用户何时真正完成下载。一般来说,我知道这是有点可能的,因为我以前做过。在我的网站的旧版本中,我编写了一个简单的servlet来提供二进制文件下载。一旦该servlet写完文件的内容,就会发送通知。当然不完美,但有用。在我的测试中,它确实提供了用户下载文件多长时间的指示。
回顾Play源代码,我发现play.mvc.results.RenderBinary类有一个我可以使用的方便的apply()方法。我编写了自己的RenderBinary版本,以便在apply()方法完成写出文件内容后发送通知。
我发现的问题是调用response.out.write()明显缓存了传出字节(通过Netty?),所以即使我写出几兆字节的数据,调用play.mvc.Http .Response.out.write()在几秒钟内完成,即使下载器需要几分钟时间才能下载文件。
我不介意编写自定义类,尽管我更喜欢使用库存Play 1.2.4发行版。
关于如何获得文件下载结束时间通知给用户浏览器的任何想法?
通过websockets上传文件的关键修复即将推出... https://github.com/playframework/play1/pull/709 – 2013-12-16 14:28:18