在 laravel5.1 中使用文件系统上传文件?

File upload using FileSystem in laravel5.1?

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

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

如果我用的是普通方法,

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

此处应放置路径,storage/apppublic/uploads(新)?

如何使用 File System 上传文件?

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

您使用 "File System" 服务在 local/cloud 文件系统上工作,例如创建、移动或删除文件。当然,您可以使用 Storage::put() 方法来存储上传的文件,但是您必须以任何一种方式从请求中获取文件。所以你通常只使用 $request->file('photo')->move($destinationPath); http://laravel.com/docs/5.1/requests#files 中指定的方法将文件移动到您想要的位置。文件系统服务本身并不意味着处理上传。这就是请求的目的。

关于文件放在哪里的问题是您必须自己回答的问题。默认存放文件的路径是storage/app。您可以将它们放入 public/uploads,但不鼓励这样做,因为任何知道 URL 的人都可以下载这些文件。这实际上取决于文件的含义。如果是 say 个人资料图片,则可以将其放入 public/uploads。如果文件是私有文件,则不应将其放在那里,而应放在 storage/app.

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

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

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

配置路径

以及如何使用文件系统上传文件?您不使用文件系统上传文件,而是使用它来保存上传的文件。上传过程是一样的,但不是调用 $uploadedFile->move() 你这样做:

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