我有一个问题,我已经坚持了两天。 我需要输出一个文件,但是我什么都没做。
请参阅以下代码和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)(文件的路径和文件本身)时,我也觉得很奇怪,它在调试时给了我文件的大小。
如果有任何提示或建议,将不胜感激。
谢谢