1

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

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

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

4

1 回答 1

1

第一个问题: 根据每个用户拥有的文件数量,我会使用某种命名约定。例如 temp/[username]/file1.dat 或 temp/[username].dat 您可以按照 s ymfony2 cookbock 在实体上上传文件并检查功能来实现此策略:

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

然后您可以将文件存储在无法通过直接 Web 访问访问的 save_folder 中。在您的应用程序/控制器中,您可以通过文件系统访问它或使用一些抽象,如KnpGaufretteBundle

于 2012-09-12T15:55:43.920 回答