【问题标题】:Laravel - Image saved in storage folder not showing to userLaravel - 保存在存储文件夹中的图像未向用户显示
【发布时间】:2018-10-27 22:59:58
【问题描述】:

我有这段代码可以将图像保存在 storage/app/uploads 文件夹中

 $image_main = Image::where('property_id', $id)->get();

$file = $request->file('file');
      $destinationPath = 'uploads';
      $i = 0;
      foreach ($file as $file1) {
          $i++;
          $extension = $file1->getClientOriginalExtension();
          $path = $file1->storeAs(
              $destinationPath, $i.time().".".$extension
          );

这是我的刀片文件

@foreach ($image_main as $images)
        <img src="{{"/storage/app/".$images->filename}}

文件保存在 storage/app/uploads 文件夹中,但不会向用户显示,它说找不到文件。我要在 filesystems.php 文件中设置什么吗

【问题讨论】:

  • 如果您使用公共存储或 S3 存储,您可以使用 &lt;img src="{{Storage::url("/storage/app/".$images-&gt;filename)}} /&gt;
  • 我正在使用存储文件夹
  • 存储不公开,因此网络服务器无法提供服务
  • 好的,解决办法是什么
  • 我应该在哪里保存文件

标签: php laravel laravel-5


【解决方案1】:

用户无法访问您的存储文件夹。

你必须通过Storage::url()方法:

Storage::url("/storage/app/{$images->filename}")

作为:

<img src="{{ Storage::url("/storage/app/{$images->filename}") }}" alt="{{ $images->filename }}" />

https://laravel.com/docs/master/filesystem#retrieving-files

【讨论】:

    【解决方案2】:

    您不能为此使用存储文件夹。您需要将图像移动到公用文件夹才能从 http 访问。

    尝试在公共文件夹中创建一个名为 images 的文件夹并将图像上传到该文件夹​​。然后您可以按如下方式访问图像。

    <img src="{{ public_path('images/image-name.png')}}" alt="" />
    

    【讨论】:

    • 如何将它们保存在公用文件夹中
    • 将您的 $destinationPath 变量更改为 - $destinationPath = '../images/';确保公用文件夹中有图像文件夹并且它是可写的。
    【解决方案3】:

    Laravel 存储文件系统是如此独特。当您进行任何上传时,它将上传到storage/app/public 目录中。要使其在public 目录中可访问,需要做的是通过运行命令创建符号链接:

    php artisan storage:link
    

    此命令会将storage/app/public 符号链接到public/storage

    只需按照documentation 了解如何放置和检索文件 url。我很确定您缺少的步骤是创建符号链接。

    希望对你有帮助。

    【讨论】:

      【解决方案4】:

      如果您在 Mac 上使用homestead 作为环境,那么您需要遵循以下步骤:

      1. 删除您的公共/存储文件夹(如果有)
      2. 按照以下步骤操作:

        1. 使用下面的命令 ssh 进入你的家园
        2. cd ~homestead
        3. vagrant up
        4. vagrant ssh
        5. cd Code/PATH_TO_YOUR_APP_ROOT_DIR
        6. php artisan storage:link
      3. 像这样访问图片{{ asset('storage/img/myimage.jpg') }}

      【讨论】:

      • 是的,仅适用于现有项目
      【解决方案5】:

      你已经在你的 .env 文件中添加了这一行

      FILESYSTEM_DRIVER = public
      

      之后,您需要在终端中运行此命令

      php artisan storage:link
      

      如果这仍然不起作用,那么您需要在链接之前调用存储目录

                      <img src="{{ asset('storage/'.$post->image) }}" width="120px" hight="120px" alt="">
      

      【讨论】:

      • 是的,添加 FILESYSTEM_DRIVER = public 非常重要,如果缺少此块代码,图像将不会出现...
      【解决方案6】:

      【讨论】:

        【解决方案7】:

        试试这个方法,它会 100% 奏效。

        首先创建一个符号链接:php artisan storage:link

        查看存储所有图像的公用文件夹,并在 src 中提及这些文件夹名称并从数据库中添加您的图像名称。

        例子:

        <img src="/images/posts/{{$post->featured_image}}">
        

        示例:在浏览器中使用链接显示图像的完整路径

        <img src="{{asset('/images/posts/'.$post->featured_image)}}">
        

        【讨论】:

          【解决方案8】:

          在尝试了几种解决方案后,我修复了它

          1. 删除符号链接

          2. 重建符号链接

             php artisan storage:link
            

          然后又成功了

          【讨论】:

            猜你喜欢
            • 2017-09-03
            • 2020-12-19
            • 2020-10-11
            • 2019-11-16
            • 2021-02-07
            • 1970-01-01
            • 2020-12-10
            • 2021-08-17
            • 1970-01-01
            相关资源
            最近更新 更多