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

自定义Uppy Companion Server报错:Unexpected Keys及升级后502问题

问题排查与解决方案:Uppy Companion Server AWS分片上传错误及502网关问题

核心问题原因

  • 分片上传参数不匹配:Uppy客户端在分片上传完成请求中新增了content-length和小写etag参数,但当前使用的AWS SDK v1对MultipartUpload.Parts的参数校验极为严格,仅允许ETag(大写)和PartNumber两个字段,多余参数直接触发UnexpectedParameter验证错误。
  • express-session配置缺失:升级Uppy Companion后,express-session要求必须显式设置resave和saveUninitialized选项,未配置会导致服务启动异常,进而引发502网关错误。

解决方案

1. 修复AWS SDK参数校验错误(核心)

选择以下任意一种方式:

  • 方式一:回退Uppy版本:将@uppy/companion和@uppy/xhr-upload降级到之前运行正常的版本,确保客户端仅传递ETag和PartNumber参数。
  • 方式二:修改Companion代码过滤参数:找到Companion中处理分片上传完成的逻辑,对客户端传递的Parts数组进行清洗,只保留合法字段:
    // 示例代码:清洗分片参数
    const validParts = clientParts.map(part => ({
      ETag: part.etag || part.ETag, // 兼容大小写的ETag
      PartNumber: part.PartNumber
    }));
    // 将validParts传入AWS SDK的completeMultipartUpload参数中
    
  • 方式三:升级到AWS SDK v3:AWS SDK v3(@aws-sdk/client-s3)的参数校验更灵活,可通过配置关闭未知参数校验,彻底解决此类问题。

2. 修复express-session配置(解决502)

在index.js的express-session初始化代码中,添加必填选项:

app.use(session({
  secret: 'your-existing-secret',
  resave: false,        // 按需设置,通常设为false
  saveUninitialized: false, // 按需设置,通常设为false(符合隐私规范)
  // 其他原有配置(如cookie、store等)
}));

3. 验证修复效果

  • 重启Companion Server,确认启动日志中无express-session的 deprecation 警告。
  • 测试文件分片上传,检查服务日志是否不再出现MultipleValidationErrors错误。
  • 登录AWS S3控制台,确认上传的文件已成功存储。

内容的提问来源于stack exchange,提问作者abhishek sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:53:17