【问题标题】:Laravel returning a 404 on an imageLaravel 在图像上返回 404
【发布时间】:2015-03-19 02:32:37
【问题描述】:

这应该是相当简单的,虽然它完全难倒我。

我在 localhost:8000 上运行了一个后端 Laravel 安装

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

我的种子数据中包含了一些“静态”图像(例如。 '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。

有什么想法吗?

【问题讨论】:

    标签: angularjs rest laravel laravel-4


    【解决方案1】:

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

    尝试直接访问图片网址。

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

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

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

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

    假设您从 public 文件夹中提供 index.php

    1. 您有public/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg 文件吗?

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

    3. 您的网络服务器(不是 Laravel 的)日志中是否显示任何错误

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

    有点像

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

    像这样的一些首要调试原则应该会为您指明正确的方向。

    【讨论】:

    • 是的,我尝试的第一件事是在浏览器中粘贴直接链接,它可以找到我自己放在那里的那些,但找不到 laravel 放的那些,导致我想“权限”。值得注意的是,我将这些图像存储在我的公共文件夹之外。当我粘贴到绝对路径时,例如。 localhost/images/image.png 它向我显示占位符图像图标,而不是空白页。只是一个空白图像。我应该注意,粘贴 url 会为我自己放入文件夹中的图像呈现图像,而且图像确实存在
    • 我将其标记为正确,因为我是一个假人,因为图像试图从我的公共文件夹中提供,其中已经有两个图像,我更改了上传路径公开,它奏效了。
    • @fr0s1yjack 如果这让你成为一个傻瓜,那么世界上每个 Web 开发人员和程序员都是一个傻瓜:)
    【解决方案2】:

    问题是你没有为你上传的图片生成一个url

    尝试像这样访问您的网址

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

    生成上面的url

    在您的控制器中添加此方法\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);
    }
    

    代码在下面返回一个 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中测试。

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

    希望对你有帮助。

    【讨论】:

      【解决方案3】:
      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.');
          }
      

      刀片视图

       <td>
                    <img src="{{ url('/images/').'/'.$site_settings->logo_image ?? '' }}" alt="" width="250px" height="auto">
                  </td>
      

      【讨论】:

        【解决方案4】:
        rm public/storage
        php artisan optimize:clear
        php artisan storage:link
        

        这对我有用。

        【讨论】:

          猜你喜欢
          • 2022-06-14
          • 2017-11-05
          • 1970-01-01
          • 2013-01-20
          • 2020-11-22
          • 1970-01-01
          • 2020-05-13
          • 2018-05-03
          • 2020-11-30
          相关资源
          最近更新 更多