Laravel是否有本地永久上传文件存储位置的约定?

时间:2016-01-04 19:07:56

标签: laravel file-upload laravel-5 storage

我有一些表单允许用户上传只有他们可以查看的文件,所以我必须将它们存储在某个地方。但是,如果我希望将这些文件保存在本地服务器上,我无法找到有关这些文件通常存储位置的任何信息。因此,我必须假设上传文件的永久存储位置没有约定。我在这个假设中是否正确?

要说清楚,我不是在谈论临时存储位置。

此外,将所有文件的存储位置作为app目录的子文件夹(启用了gitignore)是不是一个坏主意?或者将它放在app文件夹之外是否更好?谢谢!

2 个答案:

答案 0 :(得分:2)

没有关于在何处存储用户上传文件的明确约定。

然而,Laravel附带一个storage目录,它存储与框架相关的数据,如缓存,会话等。正如名称所示,它是存储文件的好地方,而不仅仅是框架文件。此外,Laravel Filesystem Documentation提到默认配置的位置为storage/app(但可以根据您的需要进行更改):

  

使用本地驱动程序时,请注意所有文件操作都与配置文件中定义的根目录相关。默认情况下,此值设置为storage / app目录。因此,以下方法会将文件存储在storage/app/file.txtStorage::disk('local')->put('file.txt', 'Contents');

Git会默认忽略此存储/应用程序文件夹。

如果您还需要公开提供这些文件,那么您有两种选择:

1。将它们存储在public目录中的某个位置。

2. 按照上面建议将它们存储在storage目录中,并从public位置创建指向该文件夹的符号链接。在Linux上,你可以运行:

ln -s /path/to/laravel/public/files /path/to/laravel/storage/app/files

当然,目录名称可以是您喜欢的任何名称,我以files为例。

第一个选项适用于您没有shell访问权限或无法创建符号链接的情况。所以,如果可能,我建议你使用第二个选项。

答案 1 :(得分:0)

Laravel上传到临时文件路径,然后您必须移动文件:

$request->file('photo')->move($destinationPath);

此方法会将文件从其临时上载位置(由PHP配置确定)移动到您选择的更长久的目标位置。

消息来源: https://laravel.com/docs/master/requests#files