2011-11-20 16 views
9

Eksperymentuję z ramą Play 2.0 w Scali. Próbuję dowiedzieć się, jak wysłać niestandardowe nagłówki HTTP - w tym przypadku "Content-Disposition: attachment; filename = foo.bar". Nie mogę znaleźć dokumentacji, jak to zrobić (dokumentacja w Play 2.0 jest ogólnie dość rzadka w tym momencie).Ustawianie nagłówków HTTP w Play 2.0 (scala)?

Jakieś wskazówki?

Odpowiedz

28

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.

+2

Metodę 'withHeaders' można wywołać jeden raz z wieloma parametrami krotki. – Rajish

+0

Dzięki, poprawiłem odpowiednio wpis. –

Powiązane problemy