首页 > 解决方案 > 在 Laravel 7 中返回响应图像

问题描述

我正在尝试创建一个迷你random图像生成器,作为我尝试过的开始:

Route::get('/img/UoJb9wl.png','Image@random');

我所做的就是退回这个

return '<img src="/assets/fe/img/welcome.jpeg" alt="Smiley face" width="200">';

然后,我在现场进行了测试:

如果我转到 URL,我会看到加载的图像

https://www.bunlongheng.com/img/UoJb9wl.png

在此处输入图像描述

如果我像这样在JSFiddle这样的网站上导入

<img src="https://www.bunlongheng.com/img/UoJb9wl.png">

我看不到它。

为什么 ?


编辑

尝试#2

return env('APP_URL').'/assets/fe/img/welcome.jpeg';

我现在返回图像路径

但我仍然没有在我的JSFiddle中渲染

<img src="https://www.bunlongheng.com/img/UoJb9wl.png">

标签: phplaravelimagelaravel-5laravel-7

解决方案


这不起作用,因为您的控制器返回的不是图像,而是 HTML 代码。

当您在浏览器中使用此地址时,它会向您的服务器发送请求,服务器以 HTML 响应,其中包含<img src="..."/>指向实际图像的链接,因此浏览器会显示它。

当您尝试在 中使用相同的地址时<img src="..."/>,您的服务器仍然返回不是图像的 HTML 代码,因此显然不会显示它。


  1. 您始终可以提供图像本身:
function random()
{
  return response()->file(/* path to image file */);
}
  1. 您可以检查Accept标题以确定要响应的内容:
function random(Request $request)
{
  $accept = $request->header('Accept');
  if (strpos($accept, 'text/html') !== false) {
    return response()->html('<img ...');
  } elseif (strpos($accept, 'image/') !== false) {
    return response()->file(...);
  }
  abort(403, 'No content for requested type');
}

推荐阅读