8

我通过 play.mvc.Results.ok(file) 从控制器返回一个文件。但是,文件下载为“下载”,没有特定的文件名。有没有办法可以设置下载的名称(即 image.png)?

谢谢

4

2 回答 2

14

为了定义特定的文件名,您必须在返回结果Content-Disposition之前在响应中设置标题。ok(file)

这是一个示例代码:

public static Result myAction() {
    ...
    response().setHeader("Content-Disposition", "attachment; filename=image.png");
    return ok(file);
}
于 2013-06-10T15:34:11.083 回答
9

Scala (Play 2.4.x) 的神奇之处在于

def myAction() {
    ...
    ok(file).withHeaders("Content-Disposition" -> "attachment; filename=image.png")
}

请注意,它是复数,它是一个地图,如果需要,您可以有多个值。

当然,接下来你要做的就是让它成为一个实际的下载,如下所示:

def myAction() {
    ...
    ok(file).withHeaders(CONTENT_TYPE -> "application/x-download",  CONTENT_DISPOSITION -> "attachment; filename=image.png")
}

请注意,控制器https://www.playframework.com/documentation/2.4.0/api/scala/index.html#play.api.mvc.Controller中定义的大多数标头都有常量

于 2015-06-29T20:58:08.233 回答