How to send a file to browser for downloading?
download, playframework-2.0
Solution
You need to set the Content-Disposition header. I believe the value of the header should be `attachment`. See Manipulating the response doc for this.
For play 2.0 the following works without explicitly setting the header:
`ok(new FileInputStream(file))`
Problem
When client request for a file, I use this code to send it: ``` public static Result download(String file) { File file = getRealFile(file); return Ok(file); } ``` But I found the browser will not download it, but display its content instead. The response header: ``` Content-Type text/plain Transfer-Encoding chunked ``` What's the correct way to send a file? Update Per Razvi's answer, I found an answer seems good for this question: https://stackoverflow.com/a/1074925/342235 But do we really have to set so many headers? ``` 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)); ```