2012-07-19 12 views
6

Quando la richiesta del cliente di un file, io uso questo codice per inviarlo:Come inviare un file al browser per il download?

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

ma ho trovato il browser non scaricarlo, ma visualizzarne il contenuto, invece. L'intestazione della risposta:

Content-Type text/plain 
Transfer-Encoding chunked 

Qual è il modo corretto di inviare un file?


Aggiornamento

risposta di Per Razvi, ho trovato una risposta sembra buona per questa domanda: https://stackoverflow.com/a/1074925/342235

Ma abbiamo veramente necessario impostare tante le intestazioni?

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)); 

risposta

8

È necessario impostare l'intestazione Content-Disposition. Credo che il valore dell'intestazione dovrebbe essere attachment. Vedere Manipulating the response doc per questo.

Per il gioco 2.0 le seguenti opere senza impostare esplicitamente l'intestazione:

ok(new FileInputStream(file))

+0

ho pensato play2 avuto qualche metodo conveniente per farlo, sfortunato :) – Freewind

+0

ho trovato un altro modo per fare questo, non lo fa richiesto l'impostazione esplicita dell'intestazione. :) – Razvi

+0

Il 'renderBinary' è solo per play1 :( – Freewind

Problemi correlati