Laravel上传图片至Storage目录时提示‘Path cannot be empty’错误求助
解决Laravel文件上传报错「Path cannot be empty」
错误详情
Path cannot be empty
{"exception":"[object] (RuntimeException(code: 0): Path cannot be empty at C:\\laragon\\www\\nextdrive_web\\vendor\\nyholm\\psr7\\src\\Factory\\Psr17Factory.php:41) [stacktrace] #0 C:\\laragon\\www\\nextdrive_web\\vendor\\symfony\\psr-http-message-bridge\\Factory\\PsrHttpFactory.php(118): Nyholm\\Psr7\\Factory\\Psr17Factory->createStreamFromFile('') #1 C:\\laragon\\www\\nextdrive_web\\vendor\\symfony\\psr-http-message-bridge\\Factory\\PsrHttpFactory.php(100): Symfony\\Bridge\\PsrHttpMessage\\Factory\\PsrHttpFactory->createUploadedFile(Object(Symfony\\Component\\HttpFoundation\\File\\UploadedFile)) #2 C:\\laragon\\www\\nextdrive_web\\vendor\\symfony\\psr-http-message-bridge\\Factory\\PsrHttpFactory.php(72): Symfony\\Bridge\\PsrHttpMessage\\Factory\\PsrHttpFactory->getFiles(Array) #3 C:\\laragon\\www\\nextdrive_web\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\RoutingServiceProvider.php(139): Symfony\\Bridge\\PsrHttpMessage\\Factory\\PsrHttpFactory->createRequest(Object(Illuminate\\Http\\Request)) #4 C:\\laragon\\www\\nextdrive_web\\vendor\\laravel\\framework\\src\\Illuminate\\Container\\Container.php(873): Illuminate\\Routing\\RoutingServiceProvider->Illuminate\\Routing\\{closure}(Object(Illuminate\\Foundation\\Application), Array) #5 C:\\laragon\\www\\nextdrive_web\\vendor\\laravel\\framework\\src\\Illuminate\\Container\\Container.php(758): Illuminate\\Container\\Container->build(Object(Closure))
问题根源
从栈追踪可见,系统将Symfony的UploadedFile对象转换为PSR-7标准上传文件时,传入了空路径。常见原因包括:
- 表单未配置文件上传必需属性
- 上传文件未被Laravel正确接收
- PHP临时文件目录不可用或配置错误
- PSR-HTTP桥接组件版本不兼容
解决步骤
1. 检查表单配置
确保上传表单包含enctype="multipart/form-data"属性,否则浏览器无法发送文件数据:
<form method="POST" action="/upload" enctype="multipart/form-data"> @csrf <input type="file" name="image"> <button type="submit">上传</button> </form>
2. 控制器中验证文件有效性
处理请求前先判断文件是否存在且有效,避免空文件操作:
public function upload(Request $request) { if (!$request->hasFile('image') || !$request->file('image')->isValid()) { return back()->withErrors(['image' => '请选择有效的图片文件']); } // 存储文件到storage目录,第二个参数指定磁盘(对应config/filesystems.php中的配置) $path = $request->file('image')->store('images', 'public'); return back()->with('success', '文件上传成功,路径:'.$path); }
3. 检查PHP上传配置
打开php.ini文件,确认以下配置:
upload_max_filesize:设置合理的最大值(如2M),需大于待上传文件大小post_max_size:该值需大于upload_max_filesize(如8M)upload_tmp_dir:确保临时目录存在且服务器有读写权限,若为空则使用系统默认临时目录,需确认目录可用
修改后重启Web服务器和PHP服务。
4. 排查PSR-HTTP桥接组件问题
若项目依赖symfony/psr-http-message-bridge和nyholm/psr7,尝试更新到兼容Laravel当前版本的最新版:
composer update symfony/psr-http-message-bridge nyholm/psr7
若问题仍存在,检查config/app.php或自定义服务提供者中是否有PSR请求绑定逻辑,确保绑定正确。
5. 确认存储目录权限
确保Laravel的storage目录及其子目录有服务器读写权限:
chmod -R 755 storage chown -R www-data:www-data storage # 根据服务器用户组调整,如Laragon下可改为当前用户组
内容的提问来源于stack exchange,提问作者Malik Umair
相关产品推荐
相关产品推荐

