FormData 文件上传的 AWS lambda 函数问题

AWS lambda function issue with FormData file upload

我有一个将文件上传到 S3 存储桶的 nodejs 代码。 我使用过 koa web 框架,以下是依赖项:

    "@types/koa": "^2.0.48",
    "@types/koa-router": "^7.0.40",
    "koa": "^2.7.0",
    "koa-body": "^4.1.0",
    "koa-router": "^7.4.0",

以下是我的示例路由器代码:

import Router from "koa-router";

const router = new Router({ prefix: '/' })
router.post('file/upload', upload)

async function upload(ctx: any, next: any) {
    const files = ctx.request.files
    if(files && files.file) {
      const extension = path.extname(files.file.name)
      const type = files.file.type
      const size = files.file.size
      console.log("file Size--------->:: " + size);
      sendToS3();
    }
  }

function sendToS3() {
   const params = {
      Bucket: bName,
      Key: kName,
      Body: imageBody,
      ACL: 'public-read',
      ContentType: fileType
    };

   s3.upload(params, function (error: any, data: any) {
      if (error) {
        console.log("error", error);
        return;
      }
      console.log('s3Response', data);
      return;
    });
}

请求正文作为 FormData 发送。

现在,当我 运行 在本地编写此代码并点击请求时,文件会上传到我的 S3 存储桶并可以查看。 在 Console 中文件大小显示如下: 这是文件的正确实际大小。

但是当我将此代码部署为 lambda 函数并点击请求时,我发现文件大小突然增加(下面的 cloudwatch 日志屏幕截图)。

该文件仍然上传到 S3,但问题是当我打开该文件时它显示以下错误。

我进一步尝试查找此行为是否在 aws 的独立实例上持续存在。但事实并非如此。因此只有当代码部署为无服务器 lambda 函数时才会出现问题。

我尝试使用邮递员以及我自己的前端应用程序。但问题依旧。

我不知道我在设置处理这种情况的lambda函数时是否忽略了任何配置。

这是我遇到过的前所未有的问题,真的很想知道以前是否有人遇到过同样的问题。此外,我无法调试并找到文件大小增加的原因。我只能假设当文件到达服务时,正在对文件进行某种 encoding/padding。

终于解决了这个问题。必须在 AWS API 网关

中添加“二进制媒体类型”

以下步骤有帮助。

AWS API 网关控制台 -> “API” -> “设置” -> “二进制媒体类型”部分。

添加了以下媒体类型:

multipart/form-data

保存更改。

部署api.

信息位置:https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-configure-with-console.html