在API网关/ Lambda上处理多部分/表单数据

时间:2019-02-05 06:25:27

标签: api lambda multipartform-data gateway serverless

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

客户端(反应),我正在使用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网关/ Lambda / Nodejs) 我在网关端的“二进制媒体类型”中添加了“ multipart / form-data”。

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

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

任何想法可能会发生什么?有什么解析方法吗?

2 个答案:

答案 0 :(得分:1)

您正在获取base64编码的数据,以下是解码的方法之一。 但是,这是一个空对象。

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

console.log(decodedData)

答案 1 :(得分:1)

尽管Ariz的答案是正确的,但我强烈建议您研究AWS Pre-Signed Upload URLs。它使您的客户端可以首先将文件上传到AWS S3存储桶,您的lambda函数可以从那里稍后访问该对象。

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

我以前写过a short blog post about this