2012-07-19 12 views
6

は、クライアントの要求は、ファイルのために、私はそれを送信するためにこのコードを使用する場合:ダウンロードのためにブラウザにファイルを送信するには?

public static Result download(String file) { 
    File file = getRealFile(file); 
    return Ok(file); 
} 

しかし、私は、ブラウザがそれをダウンロードし、代わりにその内容を表示しません発見しました。応答ヘッダー:

Content-Type text/plain 
Transfer-Encoding chunked 

ファイルを送信する正しい方法は何ですか?


更新

パーRazviの答え、私は答えはこの質問のために良いと思われるが見つかりました:https://stackoverflow.com/a/1074925/342235

しかし、私たちは本当に多くのヘッダーを設定する必要がありますか?

header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=$filepath"); 
header("Content-Type: mime/type"); 
header("Content-Transfer-Encoding: binary"); 
// UPDATE: Add the below line to show file size during download. 
header('Content-Length: ' . filesize($filepath)); 

答えて

8

Content-Dispositionヘッダーを設定する必要があります。私はヘッダーの値がattachmentであると信じています。これについては、Manipulating the response docを参照してください。プレイ2.0の場合

明示的にヘッダを設定せずに、次の作品:

ok(new FileInputStream(file))

+0

私は、私はこれを行うための別の方法を発見した – Freewind

+0

:)不運、PLAY2はこれを行うには、いくつかの便利な方法を思っていたしません明示的にヘッダを設定する必要があります。 :) – Razvi

+0

'renderBinary'はplay1のためだけです:( – Freewind