使用CakePHP 3.5' $ this-> response-> withFile()函数返回JPG文件

时间:2018-04-11 16:17:23

标签: php cakephp httpresponse cakephp-3.x cakephp-3.5

我尝试读取文件并使用CakePHP 3.5中的控制器将其返回,并且我没有太多运气。

我有一个快速测试文件,位于/ webroot目录中,具有777权限,我尝试使用以下代码返回它:

public function thumbnail( $order_id = null, $image_id = null ) {

    $this->response->withFile( $order_id.'-'.$image_id.'.jpg' );
    return $this->response;
}

当我点击那个控制器时(即/ orders / thumbnail / KC9BW0 / 1)我在浏览器中返回的是一个零字节页面,其中包含&text; / html'类型。

我无法在StackOverflow或Web上找到任何内容,一般使用3.5文档中建议的withFile()函数给出一个简单的例子。我错过了什么?

1 个答案:

答案 0 :(得分:0)

再次查看文档,您的代码略有不同:

public function sendFile($id)
{
    $file = $this->Attachments->getFile($id);
    $response = $this->response->withFile($file['path']);
    // Return the response to prevent controller from trying to render
    // a view.
    return $response;
}
     

如上例所示,您必须将文件路径传递给方法。 [...]

响应对象是不可变的,你没有重新分配对象,因此你返回一个未经修改的响应对象,并且如评论中所述,你应该传递路径,绝对路径,而不是只是一个文件名,否则文件将在APP常量指向的任何地方查找!

另见