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

