【问题标题】:AWS lambda function issue with FormData file upload与 FormData 文件上传有关的 AWS lambda 函数问题
【发布时间】:2020-03-26 17:27:30
【问题描述】:

我有一个将文件上传到 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 存储桶并可以查看。 在控制台中,文件大小显示如下: 这是文件的正确实际大小。

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

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

我进一步试图找出这种行为是否在 aws 上的独立实例上持续存在。但它没有。所以只有当代码部署为无服务器 lambda 函数时才会出现问题。

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

不知道我在设置处理此类场景的lambda函数时是否忽略了任何配置。

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

【问题讨论】:

    标签: node.js amazon-web-services amazon-s3 aws-lambda koa


    【解决方案1】:

    终于可以解决这个问题了。必须在 AWS API Gateway 中添加“二进制媒体类型”

    以下步骤有所帮助。

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

    添加了以下媒体类型:

    多部分/表单数据

    保存更改。

    部署 api。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2016-08-02
      • 2017-05-14
      • 2017-10-26
      • 2019-05-01
      • 2015-03-17
      • 1970-01-01
      相关资源
      最近更新 更多