所以,我试图通过API网关将图像传递给节点Lambda,这是自动base64编码的。这很好,我的表单数据都是正确的,除了我的图像被损坏了,我不知道如何正确解码以避免这种情况。下面是我代码的相关部分:
const multipart = require('aws-lambda-multipart-parser');
exports.handler = async (event) => {
console.log({ event });
const buff = Buffer.from(event.body, 'base64');
// using utf-8 appears to lose some of the data
const decodedEventBody = buff.toString('ascii');
const decodedEvent = { ...event, body: decodedEventBody };
const jsonEvent = multipart.parse(decodedEvent, false);
const asset = Buffer.from(jsonEvent.file.content, 'ascii');
}
首先,最好知道aws-sdk是否有一种解析多部分表单数据的方法,而不是使用这种不受支持的第三方代码。接下来,asset的值以一个与原始文件大小完全相同的缓冲区结束,但是有些字节值是关闭的。我的假设是,编码和解码的方式略有不同,可能有些字符的解释不同。
只是一个更新,以防其他人遇到类似的问题-在两个地方将'ascii'更新为'latin1',然后它开始正常工作。