尝试使用(img src)标签显示图像,图像的路径保存在我的数据库中

Trying to display image using (img src) tag, the path of the image is saved in my database

我已成功将用户上传的图像保存到我的 'advertisement' table 中名为 'image' 的字段中。但是在我的视图 (blade.php) 文件中显示图像时遇到问题。

我尝试在线搜索解决方案,但 none 对我有用...

下面是我的 AdvertisementsController 的存储方法:-

public function store(Request $request)
{
    // $media = Media::all();

    request()->validate([
        'image' => 'required',
        'image' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048'
    ]);

    //find current admin's id
    $admin_user = auth()->id();

    if ($request->hasFile('image')) {
        $image = $request->file('image');
        $image_name = str_slug($request->title).'.'.$image->getClientOriginalExtension();
        $folderPath = public_path('/uploads/images');
        $imagePath = $folderPath. "/".  $image_name;
        $image->move($folderPath, $image_name);
    }

    $title = request('title');
    $description = request('description');
    $sort_num = request('sort_num');

    $media = Media::create([
        'title' => $title,
        'description' => $description,
        'sort' => $sort_num,
        'created_by' => $admin_user,
    ]);

    Advertisement::create([
        'image' => $imagePath,
        'expired_at' => Carbon::now()->format('Y-m-d H:i:s'),
        'media_id' => $media->id,
    ]);

    // return back()->with('success', 'Your advertisement has been successfully created!');
    return redirect('/advertisements');

}

我可以成功保存路径,但是保存的路径很长,例如: "/Users/hannzern/Desktop/numericledger-backend/public/uploads/images/klang-river.jpeg" 并认为路径将保存为 "/public/uploads/images/klang-river.jpeg"。这可能是问题所在吗?

下面是我的视图代码 (blade.php):-

<h1>Advertisements</h1>

<ul>
    @foreach ($advertisements as $advertisement)
        <a href="/advertisements/{{$advertisement->id}}">
            {{ $advertisement->media->title }}   
        </a>
        <br>

        //Three methods of retrieving the image from the path but all three not working
        <img src="{{ $advertisement->image }}" height="300" width="200">

        <img src="/Users/hannzern/Desktop/numericledger-backend/public/uploads/images/klang-river.jpeg" height="300" width="200">

        <img src="/public/uploads/images/klang-river.jpeg" height="300" width="200">

        <br>
        <br>
        <br>
        <br>
    @endforeach

</ul>

<a href="/advertisements/create">Add new advertisement</a>

此外,从文件目录中,我可以在我的 /public/uploads/images 文件夹中看到 "klang-river.jpeg" 图像...有人知道为什么吗? :(

/public 将在 link 秒内在浏览器中使用 / 解析,因此您的 link 应保存到数据库中:

/Users/hannzern/Desktop/numericledger-backend/uploads/images/klang-river.jpeg

但是,为了确保在您托管应用程序的任何地方都能正常工作,您不应保存绝对路径。仅将以下内容保存到数据库中:

klang-river.jpeg

然后,使用 asset() 助手,您可以在模板中调用正确的 url:

<img src="{{ asset('uploads/images/' . $advertisement->image) }}" height="300" width="200">

这将解析为预期的 url。希望对您有所帮助。