在 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 中很少见)。
我尝试了几种方法,但无法正常工作。
客户端(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 中很少见)。