2013-10-19 80 views
1

在我UploadsController我有這樣的下載方法時:缺少數據源配置試圖下載一個文件

function download($id = null) { 
    if (!$id) { 
     $this->Session->setFlash(__('Invalid id for upload', true)); 
     $this->redirect(array('action' => 'index')); 
    } 
    $upload = $this->Upload->findById($id); 
    if (!$upload) { 
     $this->Session->setFlash(__('Invalid id for upload', true)); 
     $this->redirect(array('action' => 'index')); 
    } 


    $path = APP . 'useruploads' . DS . $upload['Upload']['id']; 
    $this->response->file($path); 
    //Return reponse object to prevent controller from trying to render a view 
    return $this->response; 
} 

但是,試圖下載一個文件,我得到這個錯誤時:

Error: The datasource configuration 493 was not found in database.php.

該文件存在, 我檢查了。 database.php與文件下載有什麼關係?這個錯誤信息對我來說並不合適。

我正在使用Cake 2.4.1。任何人都可以告訴我他們的文件下載如何與2.4.1協同工作?

這裏是堆棧跟蹤是否有幫助:

stack trace

我發現了什麼: 我的文件名爲5262ffbf-6e44-45b8-abc6-0de8009d1f70。 在文件函數中使用$ path2會給我一個錯誤。 使用帶有硬編碼ID的$ path可以工作。 但是$ path和$ path2的調試輸出是相同的。這怎麼可能?

$path = APP . 'useruploads' . DS . '5262ffbf-6e44-45b8-abc6-0de8009d1f70'; 
    $path2 = APP . 'useruploads' . DS . $upload['Upload']['id']; 
    debug($path); 
    debug($path2); 
    $this->response->file($path2, array('download' => true, 'name' => 'logo.png')); 
+0

你不需要返回響應對象,一個簡單的'$ this-> autoRender = false'就足夠了。順便一提。 – mark

+0

謝謝,但它仍然無法正常工作。 我真的不明白爲什麼使用$ path的方法有效,而使用$ path2的方法沒有。它應該是相同的,調試輸出甚至可以這麼說。 – user2672086

+0

很明顯,它們要麼不相等,要麼有別的東西造成問題。當使用硬編碼路徑時,代碼的其餘部分是否仍然相同?根據stacktrace,你正在使用'Media'視圖,你不應該這樣做!此外,實際上只有在控制器操作響應不是「CakeResponse」的實例時纔會調用它。如果未使用「媒體」視圖不能解決問題,請顯示展示上下文和範圍數據的擴展堆棧跟蹤(並請左對齊文本)。 – ndm

回答

0

我使用了一個名爲「Folder」的自創模型。事實證明,這不應該是可能的,因爲它打破了一切。我將模型更名爲「Dir」,現在它可以工作。 應該早些時候閱讀受保護模型名稱的列表。