Laravel Storage未将图片保存至storage\app\public目录问题求助
排查Laravel图片上传未保存到storage/app/public的问题
1. 检查控制器文件存储逻辑
确保在PictureController的上传方法中,明确指定使用public磁盘存储文件:
// 正确示例:将文件存储到storage/app/public/pictures目录 $path = $request->file('image')->store('pictures', 'public'); // 或自定义文件名存储 $path = $request->file('image')->storeAs('pictures', 'custom_filename.jpg', 'public');
若仅调用store('pictures')未指定磁盘,默认会使用local磁盘,文件会存入storage/app/pictures而非目标目录。
2. 验证文件是否被正确接收
在控制器方法中先确认上传文件的有效性,避免无文件时仍生成数据库记录:
if (!$request->hasFile('image') || !$request->file('image')->isValid()) { return back()->withErrors('上传图片无效,请重新选择'); }
3. 检查目录权限
确保storage和软链接后的public/storage目录具备写入权限:
- Linux/macOS执行命令:
chmod -R 755 storage public/storage chown -R www-data:www-data storage public/storage # 根据服务器运行用户调整
- Windows右键对应目录,设置读写权限给运行PHP的用户(如IIS_IUSRS或本地登录用户)。
4. 确认模型字段与存储路径写入
检查Picture模型的$fillable数组包含存储路径字段(如image_path),并确保将正确路径写入数据库:
// Picture.php protected $fillable = ['image_path', ...]; // 控制器中保存模型 Picture::create([ 'image_path' => $path, // $path为store()返回的相对路径,如pictures/xxx.jpg // 其他字段 ]);
5. 检查表单enctype属性
确保create_picture.blade.php中的表单设置了正确的编码类型,否则文件无法被上传:
<form action="/picture/create" method="POST" enctype="multipart/form-data"> @csrf <input type="file" name="image" id="image"> <button type="submit">上传图片</button> </form>
内容的提问来源于stack exchange,提问作者Argav
相关产品推荐
相关产品推荐

