7

クライアントがファイルを要求するとき、次のコードを使用して送信します。

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));
4

1 に答える 1

8

Content-Disposition ヘッダーを設定する必要があります。ヘッダーの値はattachment. これについては、応答ドキュメントの操作を参照してください。

play 2.0 の場合、ヘッダーを明示的に設定しなくても次のように動作します。

ok(new FileInputStream(file))

于 2012-07-19T11:02:14.287 に答える