我有一个带用户管理的Symfony2项目(FOsUserbundle& Sonata bundle)。在我的应用程序的某些情况下,我需要为用户创建文件,我想存储它们。文件可能很大,所以我不会将它们存储在会话/本地存储中。
第一个问题: 是否有symfony2模式来处理用户生成的文件和存储? 这些文件应该放在哪里?哪个目录?
第二个问题: 我有一个我的应用程序需要使用的大文件。用户不应该访问此文件,但主要是我的应用程序控制器必须访问。存储此文件并限制访问的最佳安全方式是什么?
答案 0 :(得分:1)
第一个问题: 根据每个用户拥有的文件数量,我会使用某种命名约定。例如temp / [username] /file1.dat或temp / [username] .dat 您可以按照s ymfony2 cookbock for file uploads on entities实施此策略并检查功能:
public function preUpload()
{
if (null !== $this->file) {
// do whatever you want to generate a unique name
$this->path = uniqid().'.'.$this->file->guessExtension();
}
}
这是生成的文件名,您可以轻松设置用户名而不是随机的“uniqueid()”。
第二个问题 在我看来,保护文件最好通过无法通过网络访问的文件夹来实现。 例如,如果您具有以下结构:
myproject
app
src
vendor
web <-- your domain points to this folder
save_files
然后您可以将文件存储在save_folder中,通过直接Web访问无法访问该文件。在您的应用程序/控制器中,您可以通过文件系统访问它或使用一些抽象,如KnpGaufretteBundle