关于 php:Laravel – 保存在存储文件夹中的图像未向用户显示

Laravel - Image saved in storage folder not showing to user

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

1
2
3
4
5
6
7
8
9
10
11
 $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
          );

这是我的刀片文件

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

该文件保存在 storage/app/uploads 文件夹中,但它不向用户显示,它说找不到文件。我是否要在 filesystems.php 文件中设置任何内容


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

1
php artisan storage:link

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

只需按照有关如何放置和检索文件 url 的文档进行操作即可。我很确定您缺少的步骤是创建符号链接。

希望对你有帮助。


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

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

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

作为:

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

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


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

1
FILESYSTEM_DRIVER = public

之后你需要在终端中运行这个命令

1
php artisan storage:link

如果仍然无法正常工作,那么您需要在链接之前调用存储目录

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


如果你在 Mac 上使用 homestead 作为环境,那么你需要遵循这个:

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

  • 使用以下命令 ssh 进入您的宅基地
  • cd ~homestead
  • vagrant up
  • vagrant ssh
  • cd Code/PATH_TO_YOUR_APP_ROOT_DIR
  • php artisan storage:link
  • 像这样访问图像 {{ asset('storage/img/myimage.jpg') }}


  • 除了这里的解决方案,请注意以下几点:

    laravel 中的存储显示符号链接 - 没有这样的文件

    Laravel - 如何恢复本地存储符号链接并刷新


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

    访问

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

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


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

  • 删除符号链接

  • 重建符号链接

    1
     php artisan storage:link
  • 又成功了


    试试这个方法,100%有效。

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

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

    示例:

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

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

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