我正在尝试将文件发送到浏览器进行下载,但在 Controller 中使用 $this->response->send_file($file_path);
却没有运气。
我收到以下错误:ErrorException [ Warning ]: finfo::file() [<a href='finfo.file'>finfo.file</a>]: Empty filename or path
$file_path 可以是绝对路径或相对路径,但我仍然遇到相同的错误。在查看了此实现的 Kohana 代码后,我无法弄清楚它应该如何工作。
以下代码将显示如何将基本文件名(例如,filename.ext)传递给 File::mime() - 这是错误的
https://github.com/kohana/core/blob/3.2/develop/classes/kohana/response.php#L434-453
// Get the complete file path
$filename = realpath($filename);
if (empty($download))
{
// Use the file name as the download file name
$download = pathinfo($filename, PATHINFO_BASENAME);
}
// Get the file size
$size = filesize($filename);
if ( ! isset($mime))
{
// Get the mime type
// HERE'S THE ISSUE!!!
$mime = File::mime($download);
}
File::mime 期望文件路径是文件系统上的绝对或相对路径,但 $download 将永远只是一个基本文件名(例如 filename.ext);
现在对我有用的唯一解决方案是更改 send_file() 方法“classes/kohana/response.php”中的代码
来自
File::mime($download);
到 $mime = File::mime($filename);
。Kohana 3.3 已将此实现更改为:
$mime = File::mime_by_ext(pathinfo($download, PATHINFO_EXTENSION));
如果没有此修复程序,则本质上 send_file 在 3.2 中不起作用。这是一个错误,还是我在这里遗漏了什么?
最佳答案
我正在使用并链接到 3.2 开发分支。这个问题在 3.2 master 分支中不存在。
对于那些感兴趣的人,请关注此拉取请求的讨论以查看最终修复:https://github.com/kohana/core/pull/183
关于Kohana 3.2 Response::send_file 对我来说似乎坏了,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11062327/