結果タイプはplay.api.mvc.Results
です(GitHubのhereを参照)。
ヘッダを追加するためには、次のように記述します。
Ok
.withHeaders(CONTENT_TYPE -> "application/octet-stream")
.withHeaders(CONTENT_DISPOSITION -> "attachment; filename=foo.txt")
または
Ok.withHeaders(
CONTENT_TYPE -> "application/octet-stream",
CONTENT_DISPOSITION -> "attachment; filename=foo.txt"
)
そしてここでは、完全なサンプルのダウンロードです:
def download = Action {
import org.apache.commons.io.IOUtils
val input = Play.current.resourceAsStream("public/downloads/Image.png")
input.map { is =>
Ok(IOUtils.toByteArray(is))
.withHeaders(CONTENT_DISPOSITION -> "attachment; filename=foo.png")
}.getOrElse(NotFound("File not found!"))
}
ファイルをダウンロードするには、 Playで別の簡単な方法が提供されます:
def download = Action {
Ok.sendFile(new java.io.File("public/downloads/Image1.png"), fileName = (name) => "foo.png")
}
欠点は、ファイルが見つからない場合に例外が発生することです。また、ファイル名は関数を介して指定されていますが、これは少し過剰なものです。
'withHeaders'メソッドは、複数のタプルパラメータで1回呼び出すことができます。 – Rajish
ありがとう、私はそれに応じて投稿を編集しました。 –