使用Laravel 5.1中的FileSystem进行文件上传?

3
我想上传文件到laravel,我只使用本地服务器,没有使用云存储。从文档中,我找到了两种与文件上传相关的方法:
  • 正常的方法 (Request::file('file')->move(dest,filename))
  • 使用文件系统
但我无法理解这些方法之间的实际区别?
如果我使用正常的方法,
$file->move('path', $fileName);

我应该把路径放在storage/app还是public/uploads(新的路径)?

如何使用文件系统上传文件?

2个回答

4
“普通”方法只允许您将上传的文件保存在本地文件系统中,只要PHP对该位置具有写入权限即可选择任何位置。此方法仅适用于“保存”操作并且仅适用于上传的文件。
“文件系统”方法更加灵活,因为它在您写入的位置上添加了一层抽象层。文件系统配置存储在单独的配置文件中,并对您的代码是透明的。您可以轻松更改底层存储(例如从本地到云),或者更改路径而不需要更改代码。文件系统还提供了许多附加帮助程序方法来操作存储的文件,如列出所有文件、检查存在性、删除等。另一个优点是它可以用于任何文件,而不仅仅是由用户在当前请求中上传的文件。
回答您的第二个问题:在普通和文件系统方法中,您都可以确定文件的存储位置。在普通方法中,您传递路径,在文件系统中,您使用filesystems.php配置来配置路径。
如何使用文件系统上传文件?您不使用文件系统来上传文件,而是使用它来保存已上传的文件。上传过程相同,但是不是调用$uploadedFile->move(),而是这样做:
Storage::put('file key', file_get_contents(Request::file('file')->getRealPath()));

1
这两种方法的区别在于用途。
您使用“文件系统”服务来处理本地/云文件系统,例如创建、移动或删除文件。当然,您可以使用Storage :: put()方法存储上传的文件,但无论如何都必须从请求中获取文件。因此,通常只需使用$request->file('photo')->move($destinationPath);方法将文件移动到所需位置,如http://laravel.com/docs/5.1/requests#files中所述。文件系统服务并不用于处理上传本身。这就是请求的作用。
关于文件存放位置的问题,您需要自己回答。存储文件的默认路径是storage/app。您可以将它们放在public/uploads中,但这是不被推荐的,因为任何知道URL的人都可以下载文件。这实际上取决于文件的用途。如果是个人资料照片,则可以放置在public/uploads中。如果文件是私有的,则不应该放在那里,而应该放在storage/app中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接