我正在尝试使用CakePHP3制作文件下载功能,并且无法将其传递到$ this-> response-> file()的正确文件路径;这是我的职责:
public function download($id)
{
$attachment = $this->Attachments->get($id);
$this->response->file(WWW_ROOT.$attachment->filepath.DS.$attachment->filename);
$return $this->response;
}
file()函数中的完整文件路径是正确的。但是,file()函数输出带有额外路径。
正确的文件路径是 SERVER_ROOT / public_html / attachments / filename
输出路径为 SERVER_ROOT / src // SERVER_ROOT / public_html / attachments / filename
所以,file()函数似乎输出了src /的文件路径,这是我不想要的。如何让它输出正确的路径?或者我应该在这种情况下使用其他功能?任何帮助表示赞赏!
答案 0 :(得分:0)
所以,问题实际上是错误的网址。虽然错误消息很奇怪,但file()函数确实接受了完整的文件路径。感谢ndm的评论!这个链接很有帮助。 CakePHP 3 - Production site download file path issue
答案 1 :(得分:0)
我来到这里是因为我有同样的问题,过了一会儿我才解决了。 问题基于:
protected function validateFile($path)
{
if (strpos($path, '../') !== false || strpos($path, '..\\') !== false) {
throw new NotFoundException(__d('cake', 'The requested file contains `..` and will not be read.'));
}
if (!is_file($path)) {
$path = APP . $path;
}
$file = new File($path);
if (!$file->exists() || !$file->readable()) {
if (Configure::read('debug')) {
throw new NotFoundException(sprintf('The requested file %s was not found or not readable', $path));
}
throw new NotFoundException(__d('cake', 'The requested file was not found'));
}
return $file;
}
validateFile()函数返回APP常量,这是你的情况下SERVER_ROOT / src /的路径。所以问题是文件位置。如果它甚至存在于该名称/,请尝试在本地主机上查找路径
答案 2 :(得分:-2)
您应该在引导文件中配置它。 wwwRoot和wwwWebRoot在这里找到这两个
https://book.cakephp.org/3.0/en/development/configuration.html