用户生成的文件存储在Symfony2中

时间:2012-09-12 14:55:27

标签: symfony storage symfony-2.1 user-management

我有一个带用户管理的Symfony2项目(FOsUserbundle& Sonata bundle)。在我的应用程序的某些情况下,我需要为用户创建文件,我想存储它们。文件可能很大,所以我不会将它们存储在会话/本地存储中。

第一个问题: 是否有symfony2模式来处理用户生成的文件和存储? 这些文件应该放在哪里?哪个目录?

第二个问题: 我有一个我的应用程序需要使用的大文件。用户不应该访问此文件,但主要是我的应用程序控制器必须访问。存储此文件并限制访问的最佳安全方式是什么?

1 个答案:

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