CakeResponse Download file is not working

…衆ロ難τιáo~ 提交于 2020-01-03 05:39:26

问题


I am writing a simple application with cakePHP 2.x. I need to allow user to uplaod and download files. The Upload works fine, but the i'm stuck with the download action.

I have a Controller name Documents, containing the Download action:

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();
}

Yes I didn't check if the file exists, etc... but it's just for testing. So the path in the download method is something like: /home/www-app/upload/$id_$filename

Of course, the file exists and both paths are equal.

But I got the following error from chrome:

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

I tried the $resp->file() method but cakePHP seems to not know that method.

Thanks!


回答1:


you are not working with Cake2.x and its response class the way you should (and how it is documented!)

dont use a new instance, there already is one you need to use:

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

etc.

also, using autoRender false you dont need a view (what for if you directly send the file?).

Correction 2013-01-10: You dont even need the send(). the autoRender part itself should suffice. The response class will then automatically invoke send() at the end of the dispatching process:

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

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


来源:https://stackoverflow.com/questions/13333399/cakeresponse-download-file-is-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!