【问题标题】:Setting HTTP headers in Play 2.0 (scala)?在 Play 2.0 (scala) 中设置 HTTP 标头?
【发布时间】:2011-11-20 04:36:13
【问题描述】:

我正在 Scala 上试验 Play 2.0 框架。我试图弄清楚如何发送自定义 HTTP 标头——在本例中为“Content-Disposition:attachment; filename=foo.bar”。我似乎找不到有关如何执行此操作的文档(Play 2.0 上的文档目前总体上非常稀少)。

有什么提示吗?

【问题讨论】:

    标签: scala playframework playframework-2.0


    【解决方案1】:

    结果类型在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 方法可以使用多个元组参数调用一次。
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多