Использование функции $this->response->withFile() в CakePHP 3.5 для возврата файла JPG

Я пытаюсь прочитать файл и вернуть его с контроллером в 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'.

Я не могу найти что-либо в Stackru или в Интернете, приводя простой пример этого с использованием функции withFile(), как рекомендовано в документации 3.5. Что мне не хватает?

1 ответ

Решение

Посмотрите документы еще раз, ваш код немного отличается:

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 постоянные указывает на!

Смотрите также

Другие вопросы по тегам