3

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

  • 普通方法(Request::file('file')->move(dest,filename))
  • 使用文件系统

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

如果我使用普通方法,

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

这里应该是路径,storage/app还是public/uploads(新)?

如何使用 上传文件File System

4

2 回答 2

4

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

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

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

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

Storage::put('file key', file_get_contents(Request::file('file')->getRealPath()));
于 2015-07-15T06:46:22.133 回答
1

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

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

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

于 2015-07-15T06:41:32.007 回答