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
相关产品推荐
相关产品推荐

