Laravel上传PDF到storage目录报"Path cannot be empty"错误如何处理
问题排查与解决方案
核心问题原因
你遇到的Path cannot be empty报错,核心是调用storeAs方法时没有指定存储磁盘,导致路径匹配错误:
- Laravel的
storeAs方法默认使用local磁盘,对应存储根路径为storage/app/ - 你手动创建的目录是
storage/app/public/profile_pdfs/,归属public磁盘管辖 - 未指定磁盘时系统会尝试写入
storage/app/profile_pdfs/,该路径不存在就会触发路径类报错
修复步骤
1. 修改存储方法指定磁盘
将getFilenametostore方法中的storeAs调用增加第三个参数,指定使用public磁盘:
// 改动前 $request->file('profile_pdf')->storeAs('profile_pdfs', $filenametostore); // 改动后 $request->file('profile_pdf')->storeAs('profile_pdfs', $filenametostore, 'public');
2. 确认配套配置正常
- 如果后续需要前端访问存储的PDF文件,可在项目根目录执行软链接创建命令:
php artisan storage:link
该命令会将storage/app/public目录映射到项目的public/storage路径,方便外部访问存储文件。
- 确保
storage目录权限为755,所属用户和web运行用户一致,避免出现权限拒绝类报错。
可选优化:规范控制器判断逻辑
你当前控制器的判断写法存在无效赋值,可调整为更规范的写法:
if ($request->hasFile('profile_pdf')) { $filenametostore = $this->getFilenametostore($request); $p = new Poste; $p->pdf = $filenametostore; $p->save(); return redirect()->route('poste.index'); }
内容的提问来源于stack exchange,提问作者Ryry
相关产品推荐
相关产品推荐

