我一直在探索允许网站访问者安全上传图片的问题。我发现过这篇文章: Long article about securly uploading images
似乎最重要的是将文件存储在文档根目录之外。
现在,如果我理解正确的话," document root
",例如,在使用XAMPP的情况下,是$_SERVER["DOCUMENT_ROOT"]
给出的,{{1} }
在我的情况下。所以把我的上传目录放在"外面"这意味着在C:/xampp/htdocs
中创建一个目录。我是对的吗?
无论如何,我已经尝试过这样做了,并且无法在模板中加载图片。图像源将始终被解释为具有" http://localhost ..."在开头,因此无法找到该文件。
我在那篇文章中看到需要使用一个名为C:/xampp
的函数,但我不知道如何在Twig上实现它。
感谢您解决此问题的任何帮助。
答案 0 :(得分:1)
Symfony的公共目录是your_project/web
,所以你不想在那里上传私人文件。相反,您可以将它们上传到特定的私人文件夹。
下面的示例允许您将文件上传到your_project/Resources/private/uploads/images
文件夹并在树枝中提供。在提供图像时,它与经典方式有点不同。您创建了一条路线,将图像作为BinaryFileResponse
返回,然后在您的树枝中显示。
我在这里只发布了关键部分,但你可以在这里看到完整的例子:Uploading images to a private directory and serving them in twig template
注意:您可以随时更改以下路线的工作方式。例如,name
参数可以是哈希等。
服务器映像的控制器操作。 Twig称之为。
/**
* @param string $name
*
* @Method({"GET"})
* @Route("/{name}", name="image_show")
*
* @return Response
*/
public function showAction($name)
{
$response = new BinaryFileResponse($this->imageUploadPath.'/'.$name);
$response->trustXSendfileTypeHeader();
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_INLINE,
$name,
iconv('UTF-8', 'ASCII//TRANSLIT', $name)
);
return $response;
}
这是显示图像的Twig部分。 images
变量来自indexAction()
,您可以在完整示例中看到。重要的是:{{ path('image_show', {'name': image}) }}
。它呼吁上面的行动。
{% for image in images %}
<img src="{{ path('image_show', {'name': image}) }}" />
{% else %}
<em>No image found.</em>
{% endfor %}
答案 1 :(得分:0)
Twig是一种生成html的模板语言。你想做什么,不能在那里完成。你需要像往常一样使用twig来生成你的html。
但是,当您添加图像标记时,需要将源设置为从脚本文件系统获取图像的php脚本,并将其与正确的图像标题一起返回。
因此twig需要在图像源中进行少量更改来生成html,但是您需要一个单独的php脚本来根据您拥有的条件(GET参数,会话信息等)来提供图像。
您当然可以将编码的图像源直接发送到树枝中的图像标记源,但这对于较大的图像来说并不实用,因为html源的大小会爆炸。