Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 从lambda(Nodejs)将多部分/表单数据上载到S3_Node.js_Amazon Web Services_Amazon S3_Aws Lambda_Aws Api Gateway - Fatal编程技术网

Node.js 从lambda(Nodejs)将多部分/表单数据上载到S3

Node.js 从lambda(Nodejs)将多部分/表单数据上载到S3,node.js,amazon-web-services,amazon-s3,aws-lambda,aws-api-gateway,Node.js,Amazon Web Services,Amazon S3,Aws Lambda,Aws Api Gateway,我想使用Nodejs将多部分/表单数据文件上传到S3 我尝试过各种方法,但都不管用。我能够从lambda将内容写入S3,但是当文件从S3下载时,它被破坏了 有人能为我提供一个可以帮助我的工作示例或步骤吗 提前感谢你 如果你这样认为,请建议另一种选择 以下是我的lambda代码: export const uploadFile = async event => { const parser = require("lambda-multipart-parser"); const res

我想使用Nodejs将多部分/表单数据文件上传到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接收到损坏的数据,或者您在将数据发送到S3时损坏了数据

将多部分/表单数据内容发送到Lambda并不简单。您可以看到如何做到这一点。

完成此操作后,如果您确定Lambda中的数据正确,请检查是否正确地将其发送到S3(请参阅S3文档和示例)。

如果要通过Lambda上载文件,一种方法是打开AWS API网关控制台

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

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

添加以下媒体类型:

多部分/表单数据

保存您的更改

然后转到“资源”->“代理方法”(如“任意”)->“方法请求”->“HTTP请求头”,并添加以下头“内容类型”、“接受”

最后部署您的api


有关更多信息,请访问:

显示您的代码,否则我们无法帮助您。@MarcosCasagrande我已添加了代码……我遇到了一个类似的问题,最终,您的最佳选择可能是将文件更改为Base64字符串并发送给Lambda,并在上载到S3之前将其转换回文件。阅读更多这里:我需要一个文件上传各种文件类型。png、jpg、pdf、doc、docx、.xls、csv等等。有两件事。我需要在AWS网关上设置二进制媒体类型。还有第二个解析器。@KedarShinde您能告诉我关于解析器的更多信息吗