快速结论:这是 LobeChat v2.2.17 上传流程回归导致的报错:服务端在生成预签名 URL 前,会对一个尚不存在的新路径发起 HeadObject 存在性检查,而随 Docker Compose 捆绑的 RustFS 对该请求返回 403,导致上传在浏览器拿到预签名 URL 之前就失败。优先确认 LobeChat 版本并升级到 v2.2.18 或更高版本。
适用环境:LobeChat v2.2.17 或更新版本;Web 桌面浏览器(Chrome);自托管 Docker 部署,使用官方 Docker Compose 配置及捆绑的 RustFS 服务;S3 配置为 S3_BUCKET=lobe、S3_REGION=us-east-1、S3_ENABLE_PATH_STYLE=1、S3_SET_ACL=0。Issue 未提供 Python、CUDA、显卡等信息。
最快修复方案:将 LobeChat 升级到 v2.2.18。评论中多位用户反馈升级后不再出现该上传问题,Issue 也以“已在 v2.2.18 解决”关闭。
注意事项:该问题定位为 LobeChat v2.2.17 引入的回归,并非浏览器 CORS 或 PUT 上传失败;不建议把 RustFS 返回的所有 403 都当作“文件不存在”处理。升级时无需改动 RustFS、其数据、凭据、bucket 或 S3 配置。
问题场景
用户在自托管 Docker 环境部署 LobeChat v2.2.17 或更新版本,存储后端使用官方 Docker Compose 捆绑的 RustFS。登录 LobeChat 后尝试上传任意小文件或图片时,上传在开始阶段即失败,LobeChat 容器日志在 upload.createS3PreSignedUrl 路径报错。降级 LobeChat 到 v2.2.16(不改动 RustFS、数据、凭据、bucket 或 S3 配置)后,同样的上传可以成功。
报错原文
Error in tRPC handler (lambda) on path: upload.createS3PreSignedUrl
Error [TRPCError]: UnknownError
[cause]: Unknown: UnknownError
'$fault': 'client'
'$metadata': {
httpStatusCode: 403,
requestId: '...',
attempts: 1
}
原因分析
根据 Issue 回归定位,v2.2.17 由 commit a20880a1252803230b065e4ad77d29e2a710d570 / PR #19119 引入的“上传预留”流程,会在签发预签名 URL 之前调用 params.storage.getFileMetadata(params.pathname)。该调用针对一个新生成、尚不存在的路径执行 HeadObject,预期返回 404;但捆绑的 RustFS 对该请求返回 403,错误被重新抛出并最终变成 UnknownError,导致上传中止、预签名 URL 未能生成。
由于失败发生在浏览器收到预签名 URL 之前,这不是浏览器 CORS 或 PUT 上传的问题。Issue 作者指出,不能简单地把所有 403 都当作“not found”处理,那样并不安全。
环境排查
- 确认 LobeChat 版本:v2.2.17 存在该回归;v2.2.16 上传正常;v2.2.18 已修复。
- 确认部署方式:自托管 Docker,使用官方 Docker Compose 及捆绑的 RustFS 服务。
- 确认 S3 配置:S3_BUCKET=lobe、S3_INTERNAL_ENDPOINT=http://rustfs:9000、S3_REGION=us-east-1、S3_ENABLE_PATH_STYLE=1、S3_SET_ACL=0。
- 确认 S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEY 使用 RustFS root 凭据,且凭据、bucket 均正确(用户已用 SHA-256 比对 secret 一致)。
- 确认 RustFS 容器与镜像 ID 一致且健康,lobe bucket 存在。
- Issue 未提供 Python、CUDA、PyTorch、显卡等信息,无需针对这些项排查。
解决步骤
- 确认当前 LobeChat 版本是否为 v2.2.17 或更新版本中受影响的范围。
- 将 LobeChat 镜像升级到 v2.2.18 或更高版本,保持 RustFS 容器、其数据、凭据、bucket 与 S3 配置不变。
- 重启 LobeChat 容器,登录后重新尝试上传此前失败的小文件或图片。
- 若仍需临时恢复可用,可将 LobeChat 降级到 v2.2.16(Issue 作者与评论用户均验证此版本上传正常),等待升级到修复版本。
验证方法
升级到 v2.2.18 后,登录 LobeChat 上传任意小文件或图片;若不再出现 upload.createS3PreSignedUrl 的 UnknownError 与 httpStatusCode 403,且文件上传成功,则视为问题已解决。Issue 评论确认升级到 v2.2.18 后不再出现该上传问题。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[BUG]: Show stopping "cannot be closed" message while installing v1.12.0 on existing 1.11.2](https://www.chat-gpts.plus/wp-content/uploads/2026/09/5357-ca1f222c-768x403.jpg)
![[P1] Converge two RetrievalTest handler implementations and unify error code convention](https://www.chat-gpts.plus/wp-content/uploads/2026/09/15744-fab62b43-768x403.jpg)
