Laravel 在图像上返回 404

Laravel returning a 404 on an image

这应该相当简单,尽管它完全难倒了我。

我在 localhost:8000

上有一个后端 Laravel 安装 运行

我在 localhost:9001 上有一个前端 Angular 应用 运行。

我有一些 'static' 图像已包含在我的种子数据中(例如 '1','user.png'),这些图像在我的前端完美呈现(它们也从我上传图像的确切位置提供)。

我目前提供的 URL 图片来自 http://localhost:8000/images/{filename}

我可以从前端上传图像到后端,它们出现在数据库中,图像被放入文件系统,我在我的前端填充正确的 URL(证明由前面的 URL).

我上传的图片没有显示。

在我的日志中我得到:

  [2015-01-20 18:13:49] local.ERROR: NotFoundHttpException Route: http://localhost:8000/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg [] []
[2015-01-20 18:13:49] local.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException'

我在我的路由文件中尝试了一种方法,但当我已经在提供一些图像时,我不明白为什么?

我还在我的 /images 文件夹上将所有权限设置为 755。

有什么想法吗?

我不确定我是否遵循了您正在进行的每一个多系统交互,但我会回到最初的 HTTP 原则。

尝试直接访问图像 URL。

http://localhost:8000/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg

如果您的浏览器(或您的日志,如果您没有将 debug 设置为 true 进行开发)中的错误是

local.ERROR: NotFoundHttpException Route: http://localhost:8000/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg

这意味着您的网络服务器无法在 images/j249ae747ce28c317e02f1fb6d0a10c3.jpg 找到文件,并将请求传递给 Laravel。这意味着您需要弄清楚为什么您的网络服务器看不到该文件。

假设您从 public 文件夹

提供 index.php
  1. 你有 public/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg 文件吗?

  2. 确定吗?将路径复制并粘贴到终端和 ls public/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg 以确保您的大脑没有遗漏一些细微的案例问题

  3. 您的 Web 服务器的日志(不是 Laravel 的)是否出现任何错误

  4. 你能在图像文件夹中创建一个 text/html 文件并提供吗?如果不是,那么您可能没有将 Web 服务器指向您认为的文件夹。

类似于

http://localhost:8000/images/test.txt
http://localhost:8000/images/test.html

像这样进行调试的一些基本原则应该能为您指明正确的方向。

问题是您还没有为上传的图片生成 url

尝试像这样访问您的url

http://localhost:8000/storage/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg

生成上面的url

在您的 controller.This 方法中添加此方法 \Storage::disk('public')->url(); 方法访问在 Config\filesystems.php 中找到的 public 磁盘阵列,并在中生成一个 url以下格式

    http://localhost:8000/storage/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg

例如下面的方法将图片存储在图片文件夹中并生成图片路径url。

public function uploadImage(Request $request)
{
    $request->validate(['image'=>'file|image|max:5000']);
    $imageProfile = new ImageProfile();
    if($request->hasFile('image') && $request->file('image')->isValid())
    { 
        $image = $request->file('image')->store('images');
        $imageProfile->image_profile_url = \Storage::disk('public')->url($image);
        $imageProfile->save()
    }
    return response()->json($imageProfile,200);
}

下面的代码returns Json 回复

{
    "id": 13,
    "image_profile_url ": "http://127.0.0.1:8000/storage/images/cxlogqdI8aodERsmw74nmEx7BkxkWrnyJLMH7sFj.jpeg",
    "updated_at": "2020-01-13 16:27:37",
    "created_at": "2020-01-13 16:27:37",
}

尝试复制 url 并在 postman 中测试它。

访问 link 以了解有关 Laravel 文件存储的更多信息 Laravel File Storage

希望对您有所帮助。

laravel 8 

控制器功能

    public function store(Request $request)
    {
         $this->validate($request, [
            'site_title' => 'required',
            'logo_image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
         ]);


        $input['logo_image'] = time().'.'.$request->logo_image->getClientOriginalExtension();
        $request->logo_image->move(public_path('images'), $input['logo_image']);


        $input['site_title'] = $request->site_title;
        //dd($input);
        Site_settings::create($input);


        return back()->with('success','Image Uploaded successfully.');
    }

blade 查看

 <td>
              <img src="{{ url('/images/').'/'.$site_settings->logo_image ?? '' }}" alt="" width="250px" height="auto">
            </td>
rm public/storage
php artisan optimize:clear
php artisan storage:link

这对我有用。