我成功使用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