我有一个带有用户管理的 Symfony2 项目(FOsUserbundle 和 Sonata 捆绑包)。在我的应用程序的某些情况下,我需要为用户创建文件,并且我想存储它们。这些文件可能很大,所以我排除将它们存储在会话/本地存储中。
第一个问题:是否有 symfony2 模式来处理用户生成的文件和存储?这些文件应该放在哪里?哪个目录?
第二个问题:我的应用程序需要使用一个大文件。用户不应访问此文件,但主要是我的应用程序控制器必须访问。存储此文件和限制访问的最佳安全方法是什么?
我有一个带有用户管理的 Symfony2 项目(FOsUserbundle 和 Sonata 捆绑包)。在我的应用程序的某些情况下,我需要为用户创建文件,并且我想存储它们。这些文件可能很大,所以我排除将它们存储在会话/本地存储中。
第一个问题:是否有 symfony2 模式来处理用户生成的文件和存储?这些文件应该放在哪里?哪个目录?
第二个问题:我的应用程序需要使用一个大文件。用户不应访问此文件,但主要是我的应用程序控制器必须访问。存储此文件和限制访问的最佳安全方法是什么?
第一个问题: 根据每个用户拥有的文件数量,我会使用某种命名约定。例如 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