Chế độ xem phương tiện bị ngừng sử dụng kể từ phiên bản 2.3. Bạn nên sử dụng Sending files để thay thế.
Check-out dụ tối thiểu này trong điều khiển của bạn:
public function download($id) {
$path = $this->YourModel->aMagicFunctionThatReturnsThePathToYourFile($id);
$this->response->file($path, array(
'download' => true,
'name' => 'the name of the file as it should appear on the client\'s computer',
));
return $this->response;
}
Tham số đầu tiên của $this->response->file
là tương đối so với thư mục APP
của bạn. Vì vậy, gọi số $this->response->file('someFolder' . DS . 'someFile.zip')
sẽ tải xuống tệp APP/someFolder/someFile.zip
.
"Gửi tệp" yêu cầu ít nhất CakePHP phiên bản 2.0. Ngoài ra, hãy xem xét xem liên kết Cookbook ở trên.
Nếu bạn đang chạy một phiên bản cũ của CakePHP bạn nên sử dụng Truyền thông xem như bạn đã đề cập trong câu hỏi của bạn. Sử dụng mã này và tham khảo Media Views (Cookbook).
Dưới đây là các phương pháp tương tự cho các phiên bản cũ:
public function download($id) {
$this->viewClass = 'Media';
$path = $this->YourModel->aMagicFunctionThatReturnsThePathToYourFile($id);
// in this example $path should hold the filename but a trailing slash
$params = array(
'id' => 'someFile.zip',
'name' => 'the name of the file as it should appear on the client\'s computer',
'download' => true,
'extension' => 'zip',
'path' => $path
);
$this->set($params);
}
Nếu bạn đang sử dụng Apache, bạn có thể buộc tải về bằng cách thêm một '.htaccess' bên trong thư mục 'tải'. Xem một số ví dụ tại đây: http://www.givegoodweb.com/post/30/forcing-a-download-with-apache-and-htaccess và http://www.timewasters-place.com/how-to-force -file-download-with-htaccess/Bằng cách này bạn không cần phải phục vụ các tập tin để tải về thông qua PHP – thaJeztah
Điều gì về việc đặt chúng tại APP_DIR/webroot/someFolder /? – SaidbakR
@ sємsєм Bạn nói đúng (không nhận thấy các tập tin không nằm trong webroot). Mặc dù chỉ đặt chúng trong một thư mục công khai sẽ không tự động buộc chúng tải xuống (ví dụ: nếu tệp là JPG). Thêm một .htaccess gửi tiêu đề 'tải xuống', sẽ giúp mọi người dễ dàng 'tải xuống' các tệp thay vì * xem * chúng bên trong trình duyệt. Mặc dù nó có thể làm như vậy xem PHP (xem câu trả lời dưới đây), điều này không phải luôn luôn lý tưởng, đặc biệt là cho các tập tin lớn. – thaJeztah