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

Nest+AWS Lambda接收Zip文件报错:Invalid CEN header (bad signature)

解决Lambda上NestJS解析Zip文件报Invalid CEN header的问题

问题定位

从你提供的File对象可见,buffer中出现了ef bf bd(UTF-8替换字符),说明原始二进制数据在传输环节被当成文本处理,导致字节损坏——这是API Gateway与Lambda之间的编码不匹配引发的问题。

解决方案

1. 配置API Gateway支持二进制媒体类型

  • 进入API Gateway控制台,找到目标API
  • 切换到设置标签页,在二进制媒体类型列表中添加application/zip
  • 务必重新部署API,配置才会生效

2. 调整代码处理可能的Base64编码

如果API Gateway仍将二进制数据转为Base64传递给Lambda,需手动解码修正buffer:

public async uploadLinkedInArchive(
  @UploadedFile(validationPipes)
  file: Express.Multer.File,
) {
  let zipBuffer = file.buffer;
  // 尝试修复Base64转码问题
  try {
    const decodedBuffer = Buffer.from(file.buffer.toString('utf8'), 'base64');
    // 验证解码后是否为合法Zip文件(Zip文件签名为0x04034b50)
    if (decodedBuffer.readUInt32LE(0) === 0x04034b50) {
      zipBuffer = decodedBuffer;
    }
  } catch (err) {
    // 解码失败则保留原buffer
  }
  
  const zip = new AdmZip(zipBuffer);
  console.log(zip.getEntries());
}

3. 检查API Gateway集成配置

  • 若使用REST API:确保集成请求的内容处理设置为Passthrough(不转换),而非Convert to text
  • 若使用HTTP API:默认支持二进制传输,但需确认已在媒体类型列表中添加application/zip

验证步骤

重新上传Zip文件后,打印buffer前10个字节,确认无ef bf bd这类替换字符,再测试AdmZip解析是否正常。

内容的提问来源于stack exchange,提问作者Ali Habibzadeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:48:22