我希望阻止从我的目录直接访问某些公共文件。例如,我有文件image.png,我必须填写验证码才能下载该文件,如果验证码失败,我不希望用户可以访问该文件。在Symfony有没有办法做到这一点?
答案 0 :(得分: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));
注意:代码未经过测试!
希望这有帮助!