【问题标题】:Access images stored in public directory via routes通过路由访问存储在公共目录中的图像
【发布时间】:2019-04-04 00:05:08
【问题描述】:

我想通过路由访问存储在 laravel 中公用文件夹中的图像,以防搜索图像是否存在于我的公用文件夹中,到目前为止,这是我的代码:

api.php

Route::group(['prefix' => 'images', 'middleware' => 'cors'], function () {
Route::get('itemsImages/{imagename}','ManagerController@itemImage');
});

ManagerController.php

public function itemImage($imagename)
{
    // Check if file exists in storage directory
    $file_path = public_path() .'/images/itemsImages/'.$imagename;
    if (file_exists($file_path))
        return Response::download($file_path);
    else
        dd($file_path);
        //does not exist
}

但该代码不起作用,甚至无法访问该路线,任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 你注册了你的中间件吗?
  • 是的,我当然做到了。
  • 检查laravel.log 上的错误,并检查您在尝试访问该网址时收到的返回码和消息。如果可能,请在此处发布结果。
  • 能否请您提及所需的路径?你想得到的。
  • 在更改 url 后尝试dd 方法中的文件名。

标签: php laravel


【解决方案1】:

我认为这可能有效,

Route::get('itemsImages/{filename}', function ($filename)
{
  $path = app_path('public/images/itemsImages') . '/' . $filename;
  $response = null;
  if (file_exists($path))
  {
    $file = File::get($path);
    $type = File::mimeType($path);

    $response = Response::make($file, 200);
    $response->header("Content-Type", $type);      
  }
  else
  {
    dd($path);
    //does not exist
  }
  return $response;
})->name('route.name');

我没有测试上面的代码,所以告诉我是否适合你。

【讨论】:

  • 它返回 200 和图像路径,它不显示图像本身
  • 可以这样显示图片<img src={{ route('route.name', 'image.jpg') }}>
  • 例如,无论您想在刀片文件中的何处显示图像
  • 好吧,我没有使用刀片,我正在使用此解决方案,因为如果图像不在该服务器中,那么我将重定向到另一个服务器,因此刀片解决方案不适用于这种情况.
  • 好吧,如果您说函数返回 200 和图像路径,这意味着文件存在并且通过该响应您可以显示图像,这就是您在第一个评论中所问的,如果不是它会执行 dd() 函数,你可以用它来做任何你想做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 2021-07-22
  • 2021-03-16
相关资源
最近更新 更多