node.js - 从 lambda (Nodejs) 上传 multipart/form-data 到 S3

标签 node.js amazon-web-services amazon-s3 aws-lambda aws-api-gateway

我想使用 Nodejs 将 multipart/form-data 文件上传到 S3。

我尝试了各种方法,但都没有用。我能够从 lambda 将内容写入 S3,但是当从 S3 下载文件时,它已损坏。

有人可以为我提供一个可以帮助我的工作示例或步骤吗?

谢谢你的期待。

如果您这么认为,请提出另一种选择。

以下是我的 lambda 代码:

export const uploadFile = async event => {
  const parser = require("lambda-multipart-parser");
  const result = await parser.parse(event);
  const { content, filename, contentType } = result.files[0];
  const params = {
    Bucket: "name-of-the-bucket",
    Key: filename,
    Body: content,
    ContentDisposition: `attachment; filename="${filename}";`,
    ContentType: contentType,
    ACL: "public-read"
  };

  const res = await s3.upload(params).promise();
  return {
        statusCode: 200,
        body: JSON.stringify({
            docUrl: res.Location
        })
    };
}

最佳答案

如果想通过 lambda 上传文件,一种方法是打开您的 AWS API Gateway 控制台。

转到

“API”-> {YourAPI}->“设置”

在那里你会找到“二进制媒体类型”部分。

添加以下媒体类型:

multipart/form-data

保存您的更改。

然后转到“资源”->“代理方法”(例如“任何”)->“方法请求”->“HTTP 请求 header ”并添加以下 header “Content-Type”、“Accept”。

最后部署您的 api。

欲了解更多信息,请访问:https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-configure-with-console.html

关于node.js - 从 lambda (Nodejs) 上传 multipart/form-data 到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59900888/

相关文章:

node.js - 无法在 EB CLI 中设置 CodeCommit

amazon-web-services - 通过 AWS CLI 将文件上传到 S3 时出现 "Broken pipe"

apache - 如何在 AWS 弹性负载均衡器上实现 HTTP 严格传输安全 (HSTS)?

java - 尝试处理 s3 文件时出现 OOM

javascript - 如何使 Chai 自定义断言失败?

javascript - Electron:如何捕获来自主进程的所有请求响应?

javascript - Express - 多条路线只需调用一次

ruby - 无法使用 ruby​​ 脚本从 amazon s3 中删除文件

amazon-web-services - 使用aws sdk在存储桶之间复制对象

amazon-s3 - 将 mod_pagespeed 与 Cloudfront 和 S3 结合使用