2017-03-01 62 views
0

我想阻止直接訪問我的目錄中的一些公共文件。例如,我有文件image.png,我必須填寫驗證碼才能下載該文件,如果驗證失敗,我不希望用戶可以訪問該文件。在Symfony中有沒有辦法做到這一點?使用Symfony阻止直接下載

+1

我真的會建議將*這些文件移動到公共目錄之外,並且只通過傳遞控制器來提供這些文件(請參閱下面的@Jeet的答案)。 – Gerry

回答

2

首先,在image目錄內部創建一個.htaccess文件,以防止直接訪問目錄中的文件。現在

Deny from All 

,給予個性化道路,通過controller要下載的文件,在那裏你可以很容易地通過使用一些捆綁像Gregwar's CaptchaBundle整合captcha

成功驗證碼驗證後,請通過Response下載該文件。

$filename = __DIR__ . "../path_to_file/image.png"; 

// Generate response 
$response = new Response(); 

// Set headers 
$response->headers->set('Cache-Control', 'private'); 
$response->headers->set('Content-type', mime_content_type($filename)); 
$response->headers->set('Content-Disposition', 'attachment; filename="' . basename($filename) . '";'); 
$response->headers->set('Content-length', filesize($filename)); 

// Send headers before outputting anything 
$response->sendHeaders(); 
$response->setContent(file_get_contents($filename)); 

注意:代碼未經測試!

希望這會有所幫助!

+0

感謝您的回覆!我認爲它可以正常工作,但只是最後一個問題。我使用Nginx作爲服務器,我創建了htaccess但它不起作用,我不知道它是由於Nginx服務器還是其他原因 –

+0

您必須爲此更改Nginx服務器配置文件。我沒有設置Nginx服務器的直接經驗。您可能想要關注這兩個鏈接:[轉換工具](https://winginx.com/en/htaccess),[配置](http://serverfault.com/a/267510/401780) – Jeet