2

我在“app/var/assets”中有一些图像(我必须将这些图像放在该目录中,我无法通过客户端限制来更改它)。

我需要展示这些图像。App 目录不是 Apache 的可访问路径,因此我需要使用 X-Send File。

我该如何使用 X-Send 文件呢?

我在我的控制器中尝试过:

$path = $this->get('kernel')->getRootDir() . '/var/assets/example.jpg';

$response = new BinaryFileResponse($path');

$response->trustXSendfileTypeHeader();
$response->headers->set('Content-type', 'image/jpg');
$response->sendHeaders();
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_INLINE, "name"); 

然后在我看来:

<img src="<?= $response ?>" />

但是找不到图片,我得到的图片网址是:

HTTP/1.0 200 OKCache-Control: publicContent-Disposition: inline; 文件名=

任何想法?

4

2 回答 2

0

我有一个类似的问题,我创建了一个返回图像的动作。

public function getImgAction(){
    $f = fopen('/var/assets/example.jpg', "rb");
    $str = stream_get_contents($f);
    fclose($f);
    $response = new Response($str, 200);
    $response->headers->set('Content-Type', 'image/jpg');
    return $response;
}
于 2014-10-08T12:09:47.067 回答
0

确保mod_xsendfile已为 apache 安装并启用它。

第 3 行有一个错字,将变量传递给类构造函数时的字符串分隔符(应该是$response = new BinaryFileResponse($path);,但我假设您知道这一点)。

于 2018-02-09T08:21:48.377 回答