CakePHP下载/ Readfile()不起作用

时间:2018-06-27 16:09:45

标签: php cakephp header readfile

我有一个问题,我已经坚持了两天。 我需要输出一个文件,但是我什么都没做。

请参阅以下代码和CakeLog响应。 在此功能中,我传入所需的数据,获取文件的位置,然后匹配文件名。我使用数据目标,文件名,通过AJAX传递到控制器,在控制器函数中对数据进行一些扭曲,然后将数据扔给模型中的我的以下函数来执行此操作。我取文件名,如果它与目录中的任何文件匹配,我将单个文件选出来并尝试设置标题并下载。到目前为止,尚未成功下载。

public function usersDownloadSingleFile($cid=null,$oid=null,$filename=null){
    if(empty($oid) || empty($cid)){
        return false;
    }

    $path = WWW_ROOT.'files'.DS.$cid.DS.$oid;
    if($vid){
        $path = $path.DS.$vid;
    }
    $realfiles = array_values(array_diff(scandir($path), array('..', '.')));

    foreach($realfiles as $file){
        if($filename === $file){
            CakeLog::write('debug','Filename: '.json_encode($file));
            if(!empty($file)) {
                header('Content-Description: File Transfer');
                header('Content-Type: application/octet-stream');
                header('Content-Disposition: attachment; filename='.basename($file));
                header('Content-Transfer-Encoding: binary');
                header('Expires: 0');
                header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                header('Pragma: public');
                header('Content-Length: ' . filesize($file));
                ob_clean();
                flush();
                readfile($file);
                CakeLog::write('debug', json_encode(readfile($path.DS.$file)));
                exit;
            } 
        }
    }
    return;
}

CakeLog响应

2018-06-27 09:04:47调试:文件名:“ 55680_post_CASS.csv”

2018-06-27 09:04:47调试:352127

在Chrome中打开开发人员面板并导航至网络时;我可以看到我要下载的文件的内容。 一切似乎都在起作用,唯一不起作用的是实际文件下载。当我调试readfile($ path.DS. $ file)(文件的路径和文件本身)时,我也觉得很奇怪,它在调试时给了我文件的大小。

如果有任何提示或建议,将不胜感激。

谢谢

0 个答案:

没有答案