使用Symfony阻止直接下载

时间:2017-03-01 03:33:41

标签: file symfony download access

我希望阻止从我的目录直接访问某些公共文件。例如,我有文件image.png,我必须填写验证码才能下载该文件,如果验证码失败,我不希望用户可以访问该文件。在Symfony有没有办法做到这一点?

1 个答案:

答案 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));

注意:代码未经过测试!

希望这有帮助!