2012-07-19 20 views
6

Khi yêu cầu khách hàng cho một tập tin, tôi sử dụng mã này để gửi nó:Làm thế nào để gửi tệp đến trình duyệt để tải xuống?

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

Nhưng tôi thấy trình duyệt sẽ không tải về nó, nhưng hiển thị nội dung của nó để thay thế. Tiêu đề phản hồi:

Content-Type text/plain 
Transfer-Encoding chunked 

Cách chính xác để gửi tệp là gì?


Cập nhật

mỗi Razvi của câu trả lời, tôi thấy một câu trả lời dường như tốt cho câu hỏi này: https://stackoverflow.com/a/1074925/342235

Nhưng sao chúng ta thực sự phải thiết lập rất nhiều tiêu đề?

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

Trả lời

8

Bạn cần đặt tiêu đề Loại bỏ nội dung. Tôi tin rằng giá trị của tiêu đề phải là attachment. Xem Manipulating the response doc cho việc này.

Đối với vở kịch 2.0 các tác phẩm sau đây mà không thiết lập một cách rõ ràng tiêu đề:

ok(new FileInputStream(file))

+0

Tôi nghĩ play2 đã có một số phương pháp thuận tiện để làm điều này, không may mắn :) – Freewind

+0

tôi tìm thấy một cách khác để làm điều này, không yêu cầu đặt tiêu đề một cách rõ ràng. :) – Razvi

+0

Phần 'renderBinary' chỉ dành cho play1 :( – Freewind

Các vấn đề liên quan