2012-11-11 109 views
0

我正在用cakePHP 2.x編寫一個簡單的應用程序。我需要允許用戶上傳和下載文件。上傳工作正常,但我堅持下載行動。CakeResponse下載文件不起作用

我有一個控制器名稱的文件,包含下載操作:

public function download($id = null) { 
    $this->Document->recursive = -1; 
    $doc = $this->Document->find('first', array('conditions' => array('Document.id' => $id))); 

    $filename = $doc['Document']['file_file_name']; 

    $resp = new CakeResponse(); 
    $resp->download(Configure::read('upload_dir').'upload'.DS.$id.'_'.$filename); 
    $resp->send(); 
} 

是的,我沒有檢查文件是否存在,等等...但它只是用於測試。 因此,下載方法的路徑如下所示:/ home/www-app/upload/$ id_ $ filename

當然,文件存在且兩個路徑相同。

但我從Chrome中得到了以下錯誤:

Erreur 6 (net::ERR_FILE_NOT_FOUND) : File or Directory not found 

我試過$ resp->文件()方法,但CakePHP的似乎不知道方法。

謝謝! (!以及它是如何記錄)

回答

2

你不與Cake2.x及其響應類工作,你應該的樣子

不使用新的實例,已經有一個你需要使用:

$this->autoRender = false; 
$this->response->send(); 

也使用autoRender假的,你不需要一個視圖(什麼,如果你直接發送文件?)。

更正2013-01-10: 你甚至不需要send()。 autoRender部件本身就足夠了。 響應類將在調度過程結束時自動調用send():

$this->autoRender = false; 
$this->response->file(Configure::read('upload_dir').'upload'.DS.$id.'_'.$filename); 

// optionally force download as $name 
$this->response->download($name);