0

我正在用 cakePHP 2.x 编写一个简单的应用程序。我需要允许用户上传和下载文件。上传工作正常,但我坚持下载操作。

我有一个控制器名称 Documents,其中包含下载操作:

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->file() 方法,但 cakePHP 似乎不知道该方法。

谢谢!

4

1 回答 1

2

您没有以应有的方式使用 Cake2.x 及其响应类(以及它是如何记录的!)

不要使用新实例,您已经有一个需要使用:

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

等等

此外,使用 autoRender false 您不需要视图(如果您直接发送文件怎么办?)。

更正 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);
于 2012-11-12T01:47:15.953 回答