Typy wyników są w play.api.mvc.Results
, patrz here na GitHub.
Aby dodać nagłówki, można napisać:
Ok
.withHeaders(CONTENT_TYPE -> "application/octet-stream")
.withHeaders(CONTENT_DISPOSITION -> "attachment; filename=foo.txt")
lub
Ok.withHeaders(
CONTENT_TYPE -> "application/octet-stream",
CONTENT_DISPOSITION -> "attachment; filename=foo.txt"
)
A oto pełna próba pobrania:
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!"))
}
Aby pobrać plik, Zagraj teraz oferuje inny prosty sposób:
def download = Action {
Ok.sendFile(new java.io.File("public/downloads/Image1.png"), fileName = (name) => "foo.png")
}
Wadą jest to, że powoduje to wyjątek, jeśli plik nie zostanie znaleziony. Również nazwa pliku jest określona za pomocą funkcji, która wydaje się nieco przesadna.
Metodę 'withHeaders' można wywołać jeden raz z wieloma parametrami krotki. – Rajish
Dzięki, poprawiłem odpowiednio wpis. –