9
我正在Scala上試用Play 2.0框架。我想弄清楚如何發送自定義HTTP頭 - 在這種情況下,「Content-Disposition:attachment; filename = foo.bar」。我似乎無法找到關於如何操作的文檔(目前Play 2.0上的文檔總體上非常稀疏)。在Play 2.0(scala)中設置HTTP標頭?
任何提示?
我正在Scala上試用Play 2.0框架。我想弄清楚如何發送自定義HTTP頭 - 在這種情況下,「Content-Disposition:attachment; filename = foo.bar」。我似乎無法找到關於如何操作的文檔(目前Play 2.0上的文檔總體上非常稀疏)。在Play 2.0(scala)中設置HTTP標頭?
任何提示?
結果類型位於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!"))
}
要下載一個文件,玩現在提供了另一種簡單的方法:
def download = Action {
Ok.sendFile(new java.io.File("public/downloads/Image1.png"), fileName = (name) => "foo.png")
}
缺點是如果找不到文件,會導致異常。此外,文件名是通過函數指定的,這似乎有點矯枉過正。
帶有多個元組參數的'withHeaders'方法可以被調用一次。 – Rajish
謝謝,我已經相應地編輯了這篇文章。 –