【问题标题】:Get path to file in storage获取存储中文件的路径
【发布时间】:2017-05-14 21:46:41
【问题描述】:

我使用以下方法将文件保存到存储中:

$request->file('avatar')->store('avatars');

将其保存到:

storage/app/avatars/avatar.png

如何获取此文件/文件夹的路径(不是 URL)?使用Laravel's Filesystem 的正确方法是什么?

【问题讨论】:

  • 没有像@sisve 所说的正确方法。我更喜欢使用Storage::disk('public')->get(IMAGE_PATH);

标签: laravel laravel-5 laravel-5.3


【解决方案1】:

没有正确的方法可以做到这一点;因为不应该这样做。 Storage 是一个不透明的系统,可以与不同的存储系统通信;因此没有 api 来获取支持文件路径。例如,这不适用于 Amazon S3。您的应用程序知道的唯一路径是您发送到 Storage 门面以使用该文件的字符串,不能保证该字符串用于在存储系统存储文件时生成文件名。

您可以使用一些适用于本地磁盘的技巧,但这些技巧通常不适用于存储系统。使用这些解决方案意味着您将限制自己仅使用本地磁盘;当您需要扩展并添加另一台服务器时,这会给您带来麻烦。然后,您将拥有两台服务器,它们具有两个独立的本地磁盘,具有不同的内容。

适用于所有配置的文件的正确处理方法是获取文件内容 (Storage::get),进行修改(包括将它们存储在临时文件中),然后写回新文件内容 (Storage::set)。

如果你确定你只会使用本地文件系统,使用File facade 而不是存储门面。我找不到任何文档,只有它公开的接口。

参考:https://github.com/laravel/framework/issues/13610

【讨论】:

  • 那么,Storage::move() 呢?我需要两个亲戚路径作为参数。我如何获得这些?
  • @Mirko 我不明白这个问题。你已经知道 $from,你在调用 Storage::put() 时传入了它。您可以选择 $to 来满足您的需要。 Storage::move('old-path/opaque-filename-1.txt', 'new-path/filename-2.txt').
  • 我从不调用 Storage::put()。我需要将文件从一个文件夹(“keep”)移动到另一个文件夹(“bin”),文件已经在服务器上。如果我使用 Storage::move(),我不能使用绝对路径,并且我发现很难获取磁盘相对文件夹。它实际上是由 Storage 门面暴露的吗?我最终将相对路径写入配置文件并在声明磁盘的filesystem.php 和使用 Storage::move() 的类中调用它;
  • @Mirko 听起来您正在使用本地文件系统,应该使用 File 门面(带有绝对路径)而不是 Storage 门面。
【解决方案2】:

试试这个

storage_path('app/avatars/avatar.png');

【讨论】:

    【解决方案3】:

    你只能从 laravel 函数中获取存储文件夹路径,你可以在它后面给出嵌套文件夹名称,它也会绑定基本 url

    storage_path(folder1/folder2/.../file.png);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 1970-01-01
      相关资源
      最近更新 更多