私は Play 1.2.4 を使用して、renderBinary() メソッドを使用してユーザーに大きなバイナリ ファイルのダウンロードを提供することに成功しています。
ユーザーが実際にいつダウンロードを完了するかについてのヒントが欲しいです。一般的に言えば、以前に行ったことがあるので、これがある程度可能であることはわかっています。私の Web サイトの古いバージョンで、バイナリ ファイルのダウンロードを提供する単純なサーブレットを作成しました。そのサーブレットがファイルの内容の書き出しを完了すると、通知が送信されました。確かに完璧ではありませんが、それでも有用です。私のテストでは、ユーザーがファイルをダウンロードするのにかかった時間を示していました。
Play のソースを確認すると、play.mvc.results.RenderBinary クラスに便利な apply() メソッドが含まれていることがわかります。独自のバージョンの RenderBinary を作成したので、apply() メソッドがファイル コンテンツの書き込みを終了した後に通知を送信できます。
私が見つけた問題は、response.out.write() の呼び出しが (Netty 経由で) 送信バイトを明らかにキャッシュすることです。ダウンローダーがファイルをダウンロードするのに数分かかりますが、.write() は数秒で完了します。
カスタム クラスを作成することは問題ありませんが、ストックの Play 1.2.4 ディストリビューションを使用することを好みます。
ファイルのダウンロードの終了がユーザーのブラウザにプッシュされたときに通知を受け取る方法についてのアイデアはありますか?