【问题标题】:Does Laravel have a convention for a local permanent uploaded file storage location?Laravel 是否有本地永久上传文件存储位置的约定?
【发布时间】:2016-04-08 11:24:32
【问题描述】:
我有一些表单允许用户上传只有他们可以查看的文件,所以我必须将它们存储在某个地方。但是,如果我希望将这些文件保存在本地服务器上,我无法找到有关这些文件通常存储位置的任何信息。因此,我必须假设上传文件的永久存储位置没有约定。我在这个假设中正确吗?
需要明确的是,我不是在谈论临时存储位置。
此外,将所有文件的存储位置作为应用程序目录的子文件夹(启用 gitignore)是不是一个坏主意?或者将它放在应用程序文件夹之外会更好吗?谢谢!
【问题讨论】:
标签:
laravel
file-upload
laravel-5
storage
【解决方案1】:
对于存储用户上传文件的位置没有明确的约定。
然而,Laravel 附带了一个 storage 目录,它存储框架相关的数据,例如缓存、会话等。顾名思义,它是存储文件的好地方,而不仅仅是框架文件。 Laravel Filesystem Documentation 还提到默认配置位置是 storage/app(但可以根据您的需要进行更改):
使用本地驱动程序时,请注意所有文件操作都相对于配置文件中定义的根目录。默认情况下,此值设置为 storage/app 目录。因此,以下方法会将文件存储在storage/app/file.txt:Storage::disk('local')->put('file.txt', 'Contents');
Git 默认会忽略此 storage/app 文件夹。
如果您还需要公开文件,那么您有两种选择:
1. 将它们存储在public 目录中的某个位置。
2.按照上面的建议将它们存储在storage 目录中,并从public 位置创建指向该文件夹的符号链接。在 Linux 上你可以运行这个:
ln -s /path/to/laravel/public/files /path/to/laravel/storage/app/files
当然目录名可以随意,我以files为例。
第一个选项适用于您没有 shell 访问权限或无法创建符号链接的情况。所以如果可能的话,我建议你使用第二个选项。