我在“app / var / assets”中有一些图像(我必须将这些图像放在该目录中,我不能通过客户端限制来更改它。)
我需要展示这些图片。 App目录不是Apache的可访问路径,因此我需要使用X-Send文件。
我如何使用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; 文件名=
有什么想法吗?
答案 0 :(得分: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;
}
答案 1 :(得分:0)
确保已为apache安装并启用mod_xsendfile
。
第3行中有一个拼写错误,将变量传递给类构造函数时字符串分隔符(应该是$response = new BinaryFileResponse($path);
,但我假设你已经知道了)。