Node.js中如何从缓冲区获取原始数据?(API Gateway+Lambda场景)
解决API Gateway + Lambda获取CSV原始数据的问题
嘿,作为Node.js新手碰到这个问题太正常了,我来帮你理清楚关键问题和解决办法:
先纠正event字段的使用误区:你当前用的
event['body-json']是比较早期的API Gateway集成格式,现在标准的Lambda event里,请求体是存在event.body字段中的。另外API Gateway会自动把非JSON的请求体(比如CSV文本)转成base64编码,此时event.isBase64Encoded会返回true,这是判断是否需要解码的关键标志。正确解码获取原始CSV内容:如果
event.isBase64Encoded为true,你需要先把base64字符串解码成Buffer,再转成UTF-8字符串(CSV属于文本格式),就能拿到原始的CSV数据了。
给你一个完整的Lambda示例代码,直接就能用:
exports.handler = async (event) => { let rawCsvData; // 判断请求体是否经过base64编码 if (event.isBase64Encoded) { // 解码base64并转成UTF-8文本 rawCsvData = Buffer.from(event.body, 'base64').toString('utf8'); } else { // 未编码的情况直接取body rawCsvData = event.body; } console.log('原始CSV内容:', rawCsvData); // 这里可以添加CSV解析逻辑,比如用csv-parser库转成JSON等 return { statusCode: 200, body: JSON.stringify({ message: 'CSV原始数据获取成功' }) }; };
- 额外的API Gateway配置提醒:确保你的API Gateway没有对请求体做多余转换。在API Gateway的集成请求里,不要设置自定义映射模板修改body;如果是二进制CSV上传,记得在API Gateway的「设置」中把
text/csv添加到二进制媒体类型列表,避免内容乱码。
这样调整后,你就能顺利拿到想要的原始CSV数据啦~
内容的提问来源于stack exchange,提问作者Nisman
相关产品推荐
相关产品推荐

