2011-11-20 10 views
9

私はScalaのPlay 2.0フレームワークを試しています。カスタムHTTPヘッダーを送信する方法を理解しようとしています。この場合、 "Content-Disposition:attachment; filename = foo.bar"です。私はそれを行う方法に関するドキュメントを見つけることができないようです(Play 2.0のドキュメントは全体的にかなり疎です)。Play 2.0(scala)でHTTPヘッダーを設定していますか?

ヒント

答えて

28

結果タイプは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") 
} 

欠点は、ファイルが見つからない場合に例外が発生することです。また、ファイル名は関数を介して指定されていますが、これは少し過剰なものです。

+2

'withHeaders'メソッドは、複数のタプルパラメータで1回呼び出すことができます。 – Rajish

+0

ありがとう、私はそれに応じて投稿を編集しました。 –

関連する問題