使用laravel5.1中的FileSystem上传文件?

时间:2015-07-15 06:29:06

标签: php laravel file-upload laravel-5 laravel-5.1

我想在laravel上传文件,我只使用本地服务器而不是任何云存储。 从doc,我发现了两个与文件上传相关的方法,

  • 普通方法(Request::file('file')->move(dest,filename))
  • 使用File system

但我无法理解这些方法之间的实际区别?

如果我使用普通方法,

$file->move('path', $fileName);

此处路径应位于storage/apppublic/uploads(新)?

如何使用File System上传文件?

2 个答案:

答案 0 :(得分:4)

"正常"方法允许您将上载的文件仅保存在您选择的任何位置的本地文件系统中,只要PHP具有对该位置的写入权限即可。此方法只能用于" save"操作,仅适用于上传的文件。

"文件系统"方法更灵活,因为它在您写入的位置添加了一层抽象。文件系统配置存储在单独的配置中,对代码是透明的。您可以轻松地更改底层存储(例如,从本地到云)或更改路径,而无需对代码进行任何更改。文件系统还为您提供了许多其他辅助方法来操作它存储的文件,例如列出所有文件,检查存在,删除。另外一个优点是它可以用于任何文件,而不仅仅是当前请求期间用户上传的文件。

回答第二个问题:您决定在普通文件系统和文件系统方法中存储文件的位置。在传递路径的常规方法中,在文件系统中使用filesystems.php config配置路径。

如何使用文件系统上传文件?您没有使用文件系统上传文件,您可以使用它来保存上传的文件。上传过程是相同的,但您不会调用 $ uploadedFile-> move(),而是执行以下操作:

Storage::put('file key', file_get_contents(Request::file('file')->getRealPath()));

答案 1 :(得分:1)

这两种方法的区别在于使用方法。

您可以使用“文件系统”服务来处理本地/云文件系统,例如创建,移动或删除文件。当然,您可以使用Storage :: put()方法存储上载的文件,但您必须从请求中获取文件。所以你通常只使用$ request->文件('photo') - > move($ destinationPath); http://laravel.com/docs/5.1/requests#files中指定的方法将文件移动到您希望的位置。文件系统服务本身并不意味着处理上载。这就是请求的目的。

关于您放置文件的位置的问题是您必须自己回答的问题。存储文件的默认路径是storage / app。您可以将它们公开/上传,但不鼓励任何知道URL可以下载文件的人。这实际上取决于文件的含义。如果是个人资料图片,则可以将其放入公开/上传。该文件是私有的,不应该放在那里,而是放在存储/应用程序。