在 AWS Lambda 中接收和发送多部分/表单数据文件

Jes*_*est 7 amazon-web-services aws-lambda aws-api-gateway serverless-framework serverless

我正在尝试对multipart/form-dataAWS lambda 函数执行包含 pdf 文件的 POST,对文件进行一些检查,然后将文件 POST 到外部 API。

我使用带有 node.js 的无服务器框架和aws-lambda-multipart-parser插件来接收文件。

从客户端到 lambda 的文件上传工作正常,我可以将缓冲区内容打印到控制台。不起作用的部分是将文件转发到外部 API。

这是我当前的 axios 设置,用于向外部 API 发出 POST 请求:

const formData = new FormData();
formData.append("file", file.content, file.filename);

const res = await axios.post(`https://external-api.com`, formData, {
  headers: { ...formData.getHeaders(), "Access-Control-Allow-Origin": "*" },
  params: {
    someParams: foo
  }
});
Run Code Online (Sandbox Code Playgroud)

file.content实际上包含一个包含文件内容的 Buffer,但是当我发出请求时,外部 API 返回错误并且请求失败...

有趣的是,当我在本地运行无服务器功能时,整个设置有效sls offline。这可能表明 API 网关设置存在问题。

一些附加信息:

根据多部分插件的说明,我在 API 网关设置中添加了二进制数据类型:

在此输入图像描述

这是 AWS Gateway 中终端节点的配置:

在此输入图像描述

我也尝试了这个SO问题AWS文档,但它们只介绍了如何接收二进制文件,而不是如何发送二进制文件。

是否可以在 lambda 中接收然后发送文件,或者应该以不同的方式解决这个问题?

小智 1

我对该库也有同样的问题。所以我尝试了 - https://www.npmjs.com/package/aws-multipart-parser - 还有关于在serverless.yml 文件中写入内容的描述。现在它就像魅力一样发挥作用!