2011-11-20 88 views
9

我正在Scala上试用Pla​​y 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!")) 
} 

要下载一个文件,玩现在提供了另一种简单的方法:

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

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

+2

带有多个元组参数的'withHeaders'方法可以被调用一次。 – Rajish

+0

谢谢,我已经相应地编辑了这篇文章。 –