2011-11-20 19 views
9

Estoy experimentando con el framework Play 2.0 en Scala. Estoy intentando descubrir cómo enviar encabezados HTTP personalizados, en este caso, "Content-Disposition: attachment; filename = foo.bar". Parece que no puedo encontrar documentación sobre cómo hacerlo (la documentación sobre Play 2.0 es bastante escasa en este momento).Configuración de encabezados HTTP en Play 2.0 (scala)?

¿Alguna pista?

Respuesta

28

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.

+2

El método 'withHeaders' se puede llamar una vez con múltiples parámetros tuple. – Rajish

+0

Gracias, he editado la publicación en consecuencia. –

Cuestiones relacionadas