我通过 play.mvc.Results.ok(file) 从控制器返回一个文件。但是,文件下载为“下载”,没有特定的文件名。有没有办法可以设置下载的名称(即 image.png)?
谢谢
我通过 play.mvc.Results.ok(file) 从控制器返回一个文件。但是,文件下载为“下载”,没有特定的文件名。有没有办法可以设置下载的名称(即 image.png)?
谢谢
为了定义特定的文件名,您必须在返回结果Content-Disposition
之前在响应中设置标题。ok(file)
这是一个示例代码:
public static Result myAction() {
...
response().setHeader("Content-Disposition", "attachment; filename=image.png");
return ok(file);
}
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中定义的大多数标头都有常量