为什么图片加载不出来?

前端开发 2026-07-10

我在用Laravel,图片加载不出来。
我不知道这是否与我的PostController有关:

<?php

namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        $posts = Post::all();
        return view('posts.gallery', compact('posts'));

    }

    /**
     * Show the form for creating a new resource.
      */
  //  public function create()
    //{
      //  return view('posts.create');
   // }


    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        $validated = $request->validate([
            'title' => 'required',
            'description' => 'required',
            'image' => 'nullable|image|max:2048'
        ]);

        if ($request->hasFile('image')) {
            $validated['image'] = $request->file('image')->store('images', 'public');
    }

        Post::create($validated);
        return redirect()->route('posts.index')->with('success','Post created successfully!');
    }

    /**
     * get the latest post
      */
    public function home()
    {
        $latestpost = Post::latest()->first();
        return view('home', ['latestpost' => $latestpost]);
    }

    /**
     * Display the specified resource.
     */
    public function show(Post $post)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit($id)
    {
        $post = Post::findOrFail($id);
        return view('posts.edit', compact('post'));
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, $id)
    {
        $validated = $request->validate([
            'title' => 'required',
            'description' => 'required',
        ]);

        $post = Post::findOrFail($id); // find the post
        $post->update($validated); //update post w new data

        return redirect()->route('posts.gallery')->with('success','Post updated successfully!');
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy($id)
    {
        $post = Post::findOrFail($id); // find the post
        $post->delete(); //update post w new data

        return redirect()->route('posts.gallery')->with('success','Post deleted successfully!');
    }
}

我想在这里显示这些帖子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
   <h1> all posts</h1>

   <a href="{{ route('posts.create') }}"> create new post</a>

   @foreach($posts as $post)
   <h2>{{ $post->title }}</h2>
   <p>{{ $post->description }}</p>
    @if($post->image)
        <img src="{{ asset($post->image) }}" alt="{{ ($post->title) }}">
    @endif
   <p>{{ $post->created_at }}</p>
   @endforeach

   <a href="{{ route('home') }}">gohome</a>
</body>
</html>

这段代码对其他部分都能工作,只有图片不行。图片无论怎样都不显示,只显示替代文本。当我点击图片图标并选“检查”时,确实显示了正确的URL。
我已经尝试删除storage文件夹,并使用php artisan storage:lin重新创建它。当我运行php artisan storage:link时,它会提示“link already exists”,但如果链接没问题,为什么图片都不显示?

这是我的web.php文件,看看是不是路由方面的问题:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\LoginController;
use App\Http\Controllers\PostController;


    Route::get('/welcome', function () {
        return view('welcome');
    })->name('login');


Route::get('/', [PostController::class, 'home'])->name('home');

Route::post('login', LoginController::class)->name('login.attempt');

Route::view('dashboard', 'dashboard')->name('dashboard');

Route::resource('posts', PostController::class);

解决方案

问题出现在这里:

    public function store(Request $request)
    {
        $validated = $request->validate([
            'title' => 'required',
            'description' => 'required',
            'image' => 'nullable|image|max:2048'
        ]);

        if ($request->hasFile('image')) {
            $validated['image'] = $request->file('image')->store('images', 'public');
    }

        Post::create($validated);
        return redirect()->route('posts.index')->with('success','Post created successfully!');
    }

你的验证规则写着图片的最大尺寸是2048,超过这个大小的图片将被视为无效。你的图片很可能比这个大。然后你的代码还是创建了一个帖子并进行重定向。相反,你可能需要确保验证与你的预期一致,并且在调试时,你还需要确保如果传入的图片无效,就不会保存这个帖子。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章