【问题标题】:how to render to blade the image stored in storage/app/public directory of Laravel 7.14?如何将存储在 Laravel 7.14 的 storage/app/public 目录中的图像渲染到刀片?
【发布时间】:2025-11-24 16:40:01
【问题描述】:

我被困住了。如何显示存储在 laravel 7.14 的 /storage/app/public 目录中的图像? 我已经尝试过我在堆栈溢出中找到的那些,甚至是我通过谷歌搜索找到的那些。

我试过这个解决方案

//Controller function
 public function renderPic($filename) {
      
      $path = '/storage/app/public/uploads/'.$filename;

      if (!File::exists($path)) {
           abort(404);
      }

      $file = File::get($path);
      $type = File::mimeType($path);

      $response = Response::make($file,200);
      $response->header("Content-Type",$type);
      return $response;
 }

网络路由

Route::get('user/renderPic/{filename}', 'User@renderPic')->name('user.renderPic');

刀片视图文件

<img id="displayPic" src="{{ route('user.renderPic',$user->filename) }}">

不显示

【问题讨论】:

  • 为什么直接从存储文件夹渲染?
  • 这就是我问的原因,我不知道如何显示来自存储的图像
  • 由于目录权限,我认为您不能直接从存储中显示,您应该创建一个符号链接。
  • 你能不能至少展示一下如何做这样的事情,而不是像那样评论?谢谢
  • 好的,我会写一个答案来尽可能地解释它。

标签: laravel laravel-7 laravel-7.x


【解决方案1】:

您不需要定义路由和控制器方法来渲染图像。

你只需在你的 laravel 应用程序的根目录中打开一个终端并运行

php artisan storage:link

这将为 storage/app/public 目录创建指向 public/storage 的符号链接

在您的刀片文件中,您只需像这样渲染图像:

<img id="displayPic" src="{{ asset('storage/your-image-name.ext') }}">

【讨论】:

  • 是不是表示,不需要指明“app”和“public”目录?..因为是storage/app/public/uploads
  • 不,您不需要包含 /app/public php artisan storage:link 命令将符号链接到 storage/app/public 目录到 /public/storage 目录
  • 您可以通过打开公用文件夹来检查生成的符号链接,您应该在那里找到一个名为 storage 的新快捷方式/符号链接目录
  • 所以如果我的图像存储在这个真实的目录中,比如这个 storage/app/public/uploads/myImage.jpg .... 它应该是这样的吗?资产('存储/上传/myImage.jpg')?
  • 好的尝试删除第二个并再次运行php artisan storage:link。可能是第一次出现错误什么的
最近更新 更多