在Play 2.0(scala)中设置HTTP标头?

时间:2011-11-20 04:36:14

标签: scala playframework playframework-2.0

我在Scala上试验Play 2.0框架。我试图弄清楚如何发送自定义HTTP标头 - 在这种情况下,“内容 - 处置:附件;文件名= foo.bar”。我似乎无法找到有关如何操作的文档(关于Play 2.0的文档在这一点上整体上非常稀疏)。

任何提示?

1 个答案:

答案 0 :(得分: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 now提供了另一种简单方法:

def download = Action {
  Ok.sendFile(new java.io.File("public/downloads/Image1.png"), fileName = (name) => "foo.png")
}

缺点是如果找不到文件,则会导致异常。此外,文件名是通过函数指定的,这似乎有点矫枉过正。