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

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

问题描述:

我一直在探索允许网站访问者安全上传图片的问题。我碰到过这篇文章: Long article about securly uploading images如何使用Twig从文档根目录的外部加载图像?

看来,最重要的是将文件存储在文档根之外。现在

,如果我理解正确的“document root”,在使用XAMPP,例如的情况下,是什么$_SERVER["DOCUMENT_ROOT"]给,这是在我的情况C:/xampp/htdocs 。所以把我的上传目录放在它的“外部”将意味着在C:/xampp中创建一个目录。我对吗?

无论如何,我试过这样做,并且无法加载模板中的图像。图像源始终会被解释为“http://localhost ...”,因此无法找到该文件。

我看到那篇文章,一个函数调用readfile()需要被使用,但我不知道如何实现它的枝条。

我希望有任何帮助解决这个问题。

Twig是生成html的模板语言。你想做什么,不能在那里完成。你将需要使用树枝来生成你的html,就像你一直这样做。

但是,当您添加图像标签,你需要设置源到PHP脚本,从文件系统得到的图像,并返回它在使用正确的图片头组合源。

所以树枝需要生成的图像源的一个小的变化的HTML,但你需要一个单独的PHP脚本来提供基于你有条件(GET参数,会话信息等)的图像。

你当然可以直接发送编码的图像源在树枝图像标签的来源,但不是较大的图像作为你的HTML源就会爆炸的规模确实实用。

+0

谢谢您的回复。我会试一试 – sheff2k1

的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; 
} 

这是显示图像的小枝部分。 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 %} 
+0

谢谢你的详细回复!我需要提到我没有使用symphony框架,而是使用树枝作为模板引擎的定制迷你框架:-) – sheff2k1

+0

请从您的问题中删除symfony标签。 – BentCoder