Los tipos de resultados están en play.api.mvc.Results
, vea here en GitHub.
Para añadir cabeceras, se escribiría:
Ok
.withHeaders(CONTENT_TYPE -> "application/octet-stream")
.withHeaders(CONTENT_DISPOSITION -> "attachment; filename=foo.txt")
o
Ok.withHeaders(
CONTENT_TYPE -> "application/octet-stream",
CONTENT_DISPOSITION -> "attachment; filename=foo.txt"
)
Y aquí es una muestra de descarga completa:
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!"))
}
Para descargar un archivo, Jugar ahora ofrece otra manera simple:
def download = Action {
Ok.sendFile(new java.io.File("public/downloads/Image1.png"), fileName = (name) => "foo.png")
}
La desventaja es que esto da como resultado una excepción si no se encuentra el archivo. Además, el nombre de archivo se especifica a través de una función, que parece un poco exagerada.
El método 'withHeaders' se puede llamar una vez con múltiples parámetros tuple. – Rajish
Gracias, he editado la publicación en consecuencia. –