我想在laravel
上传文件,我只使用本地服务器,但不使用任何云存储。从doc中,我发现了两个与文件上传相关的方法,
- 普通方法
(Request::file('file')->move(dest,filename))
- 使用文件系统
但是我无法理解这些方法之间的实际区别。
如果我使用普通方法,
$file->move('path', $fileName);
这里的路径应该位于哪里,storage/app
或public/uploads
(新)?
如何使用File System
上传文件
"normal"方法只允许您将上传的文件保存在本地文件系统中您选择的任何位置,只要PHP对该位置具有写访问权限。此方法只能用于"保存"操作,并且只能用于上传的文件。
"filesystem"方法更加灵活,因为它在写入的位置上添加了一层抽象。文件系统配置存储在单独的配置中,对代码是透明的。您可以轻松地更改底层存储(例如,从本地到云)或更改路径,而无需更改代码。文件系统还为您提供了许多额外的辅助方法来操作它存储的文件,例如列出所有文件、检查存在性、删除。另一个优点是,它可以用于任何文件,而不仅仅是用户在当前请求期间上传的文件。
回答您的第二个问题:您决定在正常和文件系统方法中存储文件的位置。在传递路径的常规方法中,在文件系统中使用filessystems .php config配置路径。
如何使用文件系统上传文件?您不使用文件系统来上传文件,而是使用它来保存上传的文件。上传过程是相同的,但不是调用$uploadedFile->move(),而是:
Storage::put('file key', file_get_contents(Request::file('file')->getRealPath()));
这两种方法的区别在于用法。
您使用"文件系统"服务在本地/云文件系统上工作,如创建,移动或删除文件。当然,您可以使用Storage::put()方法来存储上传的文件,但是无论采用哪种方法,您都必须从请求中获取文件。所以你通常只使用$request->file('photo')->move($destinationPath);方法将文件移动到您想要的位置。文件系统服务本身并不处理上传。这就是请求的目的。
关于你把文件放在哪里的问题你必须自己回答。存储文件的默认路径是storage/app。你可以把它们放到公共/上传,但这是不鼓励的,因为任何知道URL的人都可以下载文件。这实际上取决于文件的目的。如果它是一张头像,那么它可以放在公共/上传。如果文件是私有的,那么它不应该放在那里,而应该放在存储/app中。