2014-03-07 63 views
1

我有4種不同類型的文件下載image/doc/pdf/xls。我想點擊文件鏈接下載文件。如何下載文件cakephp 2.4

//控制器

public function sendFile($id) { 
    $file = $this->Attachment->getFile($id); 
    $this->response->file($file['path']); 
    // Return response object to prevent controller from trying to render 
    // a view 
    return $this->response; 
} 

//視圖

<a href="<?php echo $this->response->file($file->path); ?>"><?php echo $file->name; ?></a> 

回答

2

無需返回響應 - 見this。 只需使用

public function send_file($id = null) { 
    ... 
    $this->autoRender = false; 
    $this->response->file($file['path']); 
} 

在你看來,你需要鏈接到這個控制器動作,但(如果你想想看):

$this->Html->link('Download', array(
    'controller' => 'controller_name', 'action' => 'send_file', $id 
)); 

此外請注意我給你改正的慣例 - 該文件告訴你也是。

+0

剛剛更新了您的答案 – Fury

0

只是爲了完成並添加馬克的回答一些筆記

只需使用

public function send_file($file_name = null) { 
    //local machine to the file 
    //e.g. c:\wamp\www\project\... 
    $path_local = 'path to the file'.$file_name; 

    //live path to the file 
    //e.g. \var\... 
    $path_live = 'path to the file'.$file_name; 

    $this->autoRender = false; 
    //if you trying to test it from localhost set the localhost path 
    //other wise live path 
    $this->response->file($path_live or $path_local, array('download' => true)); 
} 

在你看來,你需要鏈接到這個控制器動作,但(如果你想想看):

$this->Html->link('Download', array(
    'controller' => 'controller_name', 'action' => 'send_file', $file_name 
)); 

還請注意我爲您糾正的約定 - 文檔也告訴您這一點。

+1

由於文件名可能包含無效的URL字符,因此很容易中斷。它應該是一個slu or或一個獨特的身份證。或者應該使用查詢字符串。 – mark

+0

我打算使用唯一的查詢字符串。感謝您的答覆。 – Fury