【问题标题】:Laravel - Storage::files($user->email) returns unwanted forward slash to folderLaravel - Storage::files($user->email) 将不需要的正斜杠返回到文件夹
【发布时间】:2017-08-08 10:12:16
【问题描述】:
  • Laravel 5.4
  • Win10 上的 XAMPP

我真的需要一劳永逸地了解哪种方法返回正斜杠,哪种方法返回反斜杠。

我已将我的图像保存在以每个连接的用户电子邮件命名的文件夹中:

$userImages = Storage::files($user->email);

这个结果给了我:

array:7 [▼
  0 => "userEmail@mail.com/88bt97XslJMpre4dpJZO0ZRV9EV9GQbJw3FcQ4u8.png"
  1 => "userEmail@mail.com/dBfhlwB5HtNatUUCchZkA5PmqAxqruZi1zV3x3Ue.png"
  2 => "userEmail@mail.com/kbdJkR0oydplRA773uo6GzbYMfPJrtWILuBcuUQB.png"
  3 => "userEmail@mail.com/LHn80pVlrCPEj0YJcy4U6v8kTCuAOU43HGmuBNMs.png"
  4 => "userEmail@mail.com/MHkX31Dv5WmLtR8TsW4DgLTsQKjMwDbOrz3OlU4u.png"
  5 => "userEmail@mail.com/tebwcupwS4vU3BOsiLT5TUO298ImY5DprTHWnCef.png"
  6 => "userEmail@mail.com/YdMHREMBIQbinBw8IqBvfOLjigt5CS0XNAEUE4Le.png"
]

这很酷,因为现在我要做的就是在前面解析它,但是由于我需要给这些 URL 一个前缀,所以我使用了storage_path(),如下所示:

@if($userImages)
        @foreach($userImages as $image)
            <img src="{{storage_path().'\\'.$image}}">
        @endforeach
    @else
        doesn't exist
    @endif

现在斜线不匹配如下:

G:\xampp\htdocs\laraGo\storage\userEmail@mail.com/88bt97XslJMpre4dpJZO0ZRV9EV9GQbJw3FcQ4u8.png

第一个斜线遵循 storage_path() 的斜线约定,但我从控制器中得到的是:$userImages 数组有不同的斜线约定。

如果您能告诉我使用 storage_path 是否存在问题,或者我应该使用其他 Laravel 方法,我会很高兴..

我也很高兴知道是否有办法知道哪些方法给我带来了哪种路径?

谢谢,老兄。

【问题讨论】:

    标签: php laravel laravel-storage


    【解决方案1】:

    正如documentation 所说,您正在使用storage_path() 生成URL

    返回存储目录的完全限定路径。

    这意味着您将返回到存储的本地路径,即您计算机上的文件夹,在您的示例中,它似乎是一台 Windows 计算机,它在所有路径中都使用反斜杠。如果您在基于 unix 的计算机上运行它,您将收到由正斜杠组成的路径。但是,在这种情况下,您似乎正在尝试创建一个 URL 来显示图像,这对您有用,因为生成的 URL 是指本地计算机上的图像。但是,如果您尝试从计算机以外的任何机器访问,这将不起作用。要创建资产的有效 URL,您需要使用 asset 帮助器,它会生成资产的有效 URL。

    【讨论】:

      【解决方案2】:

      嗯,我在访问时使用 env APP_URL

       <img src="{{ env('APP_URL').'/storage/'.$image}}">
      

      【讨论】:

      • 首先感谢Aan的回答,但是这样的前端不应该有提升env的安全问题吗?
      • 部署到服务器时可以设置.env文件权限为755
      【解决方案3】:

      您可以使用asset,这将使用请求的当前方案(HTTP 或 HTTPS)为资产生成 URL

      <img src="{{ asset('storage/' . $image) }}" />
      

      【讨论】:

      • 这给了我:http://larago.dev/storage/userEmail@mail.com/88bt97XslJMpre4dpJZO0ZRV9EV9GQbJw3FcQ4u8.png,由于链接已损坏且无法正常工作,因此无法访问。
      • 如果这不起作用,那么larago.dev 没有指向您的网络服务器,并且您的环境设置不正确。
      猜你喜欢
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多