我正在Scala上试用Pla​​y 2.0框架。我试图弄清楚如何发送自定义HTTP header -在这种情况下为“Content-Disposition:attachment; filename = foo.bar”。我似乎找不到有关如何执行此操作的文档(此时Play 2.0上的文档总体上很少见)。

有什么提示吗?

最佳答案

结果类型在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")
}

缺点是,如果找不到该文件,则会导致异常。另外,文件名是通过函数指定的,这似乎有点过头了。

关于scala - 在Play 2.0(scala)中设置HTTP header ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8199490/

10-16 00:54