【问题标题】:User generated files storage in Symfony2Symfony2 中用户生成的文件存储
【发布时间】:2012-09-05 15:22:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: symfony storage symfony-2.1 user-management


    【解决方案1】:

    第一个问题: 根据每个用户拥有的文件数量,我会使用某种命名约定。例如temp/[用户名]/file1.dat 或 temp/[用户名].dat 您可以按照 symfony2 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
    

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

    【讨论】:

    • 谢谢 MOc。我会尝试你的两个答案并保持更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2013-09-23
    • 2013-09-22
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多