2017-09-22 131 views
0

我一直在探索允許網站訪問者安全上傳圖片的問題。我碰到過這篇文章: Long article about securly uploading images如何使用Twig從文檔根目錄的外部加載圖像?

看來,最重要的是將文件存儲在文檔根之外。現在

,如果我理解正確的「document root」,在使用XAMPP,例如的情況下,是什麼$_SERVER["DOCUMENT_ROOT"]給,這是在我的情況C:/xampp/htdocs 。所以把我的上傳目錄放在它的「外部」將意味着在C:/xampp中創建一個目錄。我對嗎?

無論如何,我試過這樣做,並且無法加載模板中的圖像。圖像源始終會被解釋爲「http://localhost ...」,因此無法找到該文件。

我看到那篇文章,一個函數調用readfile()需要被使用,但我不知道如何實現它的枝條。

我希望有任何幫助解決這個問題。

回答

0

Twig是生成html的模板語言。你想做什麼,不能在那裏完成。你將需要使用樹枝來生成你的html,就像你一直這樣做。

但是,當您添加圖像標籤,你需要設置源到PHP腳本,從文件系統得到的圖像,並返回它在使用正確的圖片頭組合源。

所以樹枝需要生成的圖像源的一個小的變化的HTML,但你需要一個單獨的PHP腳本來提供基於你有條件(GET參數,會話信息等)的圖像。

你當然可以直接發送編碼的圖像源在樹枝圖像標籤的來源,但不是較大的圖像作爲你的HTML源就會爆炸的規模確實實用。

+0

謝謝您的回覆。我會試一試 – sheff2k1

0

的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

相關問題