播放框架设置下载文件名

use*_*425 7 playframework playframework-2.0 playframework-2.1

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

谢谢

mgu*_*min 14

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

这是一个示例代码:

public static Result myAction() {
    ...
    response().setHeader("Content-Disposition", "attachment; filename=image.png");
    return ok(file);
}
Run Code Online (Sandbox Code Playgroud)


Tec*_*mag 8

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

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

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

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

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

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