自定义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
相关产品推荐
相关产品推荐

