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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:39:53