如何使用Twig从文档根目录的OUTSIDE加载图像?

时间:2017-09-22 08:23:39

标签: php xampp twig

我一直在探索允许网站访问者安全上传图片的问题。我发现过这篇文章: Long article about securly uploading images

似乎最重要的是将文件存储在文档根目录之外。

现在,如果我理解正确的话," document root",例如,在使用XAMPP的情况下,是$_SERVER["DOCUMENT_ROOT"]给出的,{{1} } 在我的情况下。所以把我的上传目录放在"外面"这意味着在C:/xampp/htdocs中创建一个目录。我是对的吗?

无论如何,我已经尝试过这样做了,并且无法在模板中加载图片。图像源将始终被解释为具有" http://localhost ..."在开头,因此无法找到该文件。

我在那篇文章中看到需要使用一个名为C:/xampp的函数,但我不知道如何在Twig上实现它。

感谢您解决此问题的任何帮助。

2 个答案:

答案 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源的大小会爆炸。