如何将文件发送到浏览器进行下载?

时间:2012-07-19 10:54:37

标签: download playframework-2.0

当客户请求文件时,我使用此代码发送它:

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

但我发现浏览器不会下载它,而是显示其内容。响应标题:

Content-Type    text/plain
Transfer-Encoding   chunked

发送文件的正确方法是什么?


更新

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

1 个答案:

答案 0 :(得分:8)

您需要设置Content-Disposition标头。我相信标题的值应为attachment。请参阅Manipulating the response doc。

对于play 2.0,以下工作无需明确设置标题:

ok(new FileInputStream(file))