2012-07-19 17 views
6

Cuando solicitud del cliente para un archivo, que utiliza este código para enviarlo:¿Cómo enviar un archivo al navegador para descargarlo?

public static Result download(String file) { 
    File file = getRealFile(file); 
    return Ok(file); 
} 

pero he encontrado el navegador no descargarlo, pero mostrar su contenido en su lugar. El encabezado de respuesta:

Content-Type text/plain 
Transfer-Encoding chunked 

¿Cuál es la forma correcta de enviar un archivo?


actualización

respuesta de por Razvi, encontré una respuesta que parece bueno para esta pregunta: https://stackoverflow.com/a/1074925/342235

Pero, ¿realmente tiene que configurar tantas cabeceras?

header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=$filepath"); 
header("Content-Type: mime/type"); 
header("Content-Transfer-Encoding: binary"); 
// UPDATE: Add the below line to show file size during download. 
header('Content-Length: ' . filesize($filepath)); 

Respuesta

8

Debe configurar el encabezado Content-Disposition. Creo que el valor del encabezado debe ser attachment. Ver Manipulating the response doc para esto.

Para el juego 2.0 las siguientes obras sin establecer explícitamente la cabecera:

ok(new FileInputStream(file))

+0

pensé play2 tenían algún método conveniente de hacer esto, mala suerte :) – Freewind

+0

he encontrado otra manera de hacer esto, no lo hace requiere establecer explícitamente el encabezado. :) – Razvi

+0

El 'renderBinary' es solo para play1 :( – Freewind

Cuestiones relacionadas