You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel表单上传图片后无法在视图中显示的问题求助

图片上传后无法在视图显示的解决方向

我按YouTube教程实现表单上传图片,将图片路径存储到storage/app/images目录,但在视图里无法显示图片,求解决思路。相关代码及目录信息如下:

表单代码

<form action="{{ url('publish-news') }}" method="post" enctype="multipart/form-data">
    @csrf

    <div class="form-group">
        <input type="text" name="title" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter title" >
    </div>

    <textarea id="content" name="content"> </textarea>
    <div class="mb-3">
        <input name="image" class="form-control file-form pr-2" type="file" id="formFile">
    </div>

    <button type="submit" class="btn btn-primary btn-md">Publish</button>

    <script>
        var desc = CKEDITOR.instances.DSC.getData();
    </script>
</form>

控制器代码

public function addnews(Request $request)
{
    $request -> validate([
        'title' => 'required',
        'content' => 'required',
        'image' => 'required'
    ]);

    $content = $request->input('content');
    $title = $request ->input('title');
    $image = $request -> file('image');

    if ($image)
    {
        $newfile = $request->file('image');
        $file_path = $newfile->store('images');
        $timestamp = \Carbon\Carbon::now()->toDateTimeString();
        $data=array('title'=>$title,"content"=>$content,"image"=>$file_path,"timestamp"=>$timestamp);
        $query = DB::table('announcement')->insert($data);

        return view('admin.admin-announcement');
    }
}

视图代码(图片展示部分)

<div class="container row m-lg-3">
    @foreach($announcements as $announcement)
        <div class="card col-lg" style="width: 18rem;">
            <img class="card-img-top" src="{{asset('storage/'.$announcement->image)}}" alt="Card image cap">
            <div class="card-body">
                <h5 class="card-title"> {{$announcement->title}}</h5>
                <a href="#" class="btn btn-primary">Go somewhere</a>
            </div>
        </div>
    @endforeach
</div>

目录结构

目录结构


解决方向

  • 创建存储软链接:Laravel默认不允许直接访问storage目录下的文件,必须执行php artisan storage:link命令,在public目录生成指向storage/app/public的软链接。
  • 调整存储路径:当前代码把图片存在storage/app/images,不在软链接覆盖的storage/app/public范围内,建议修改控制器里的存储代码为$file_path = $newfile->store('public/images');,这样图片会存在storage/app/public/images,同时视图里的路径改为{{asset('storage/'.str_replace('public/','',$announcement->image))}},或者直接存储时自定义路径只保留文件名部分。
  • 验证文件上传状态:检查对应存储目录(storage/app/images或修改后的storage/app/public/images)是否存在上传的图片,确认文件确实上传成功。
  • 核对数据库路径:查看announcement表的image字段,确认存储的路径格式正确(比如是否为images/xxx.jpg或public/images/xxx.jpg)。
  • 检查目录权限:确保storage和public目录有足够的读写权限,Linux环境可执行chmod -R 755 storage public命令设置权限。

内容的提问来源于stack exchange,提问作者lil poggers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:00:59