在 API Gateway/Lambda 上处理 multipart/form-data

Handling multipart/form-data on API Gateway/Lambda

我尝试了几种方法,但无法正常工作。

客户端(React),我正在使用 POST、

发送一个 zip 文件如下
const data = new FormData();
        data.append('file', file);
        data.append('filename', file.name);

let params = {
            headers: {
                'Content-Type': 'multipart/form-data'
            },
            body: data
        };

服务器端:(API Gateway/Lambda/Nodejs) 我将 'multipart/form-data' 添加到网关端的二进制媒体类型。

通过 lambda 解析时 event.body 格式不正确。 它看起来像这样:

{"body": "e30=",
"isBase64Encoded": true }

知道会发生什么吗?对如何解析有任何看法吗?

你得到的是base64编码的数据,下面是其中一种解码方式。 但是它是一个空对象。

var base64 = 'e30='
var decodedData = Buffer.from(base64, 'base64').toString();

console.log(decodedData)

虽然 Ariz 的回答是正确的,但我强烈建议您查看 AWS Pre-Signed Upload URLs。它允许您的客户端先将文件上传到 AWS S3 存储桶,您的 lambda 函数稍后可以从那里访问该对象。

特别是当您处理大型二进制文件时,前一种方法会导致很多问题(-> 内存问题,这在 Lambda 中很少见)。

我过去写过a short blog post about this