如何使用API​​网关上传xls / xlsx文件并将文件数据发送到lambda函数?

时间:2018-04-04 01:02:42

标签: node.js aws-lambda aws-api-gateway

我是lambda和API Gateway的新手。我使用这些服务做了很简单的事情,但是现在我有一个要求用户可以上传excel文件的要求。上传过程只是触发一个与lambda函数集成的API网关端点。我不想保存文件,我只想将文件数据以CSV / JSON格式发送到我的lambda函数(nodejs代码),然后处理/转换/保存数据。有谁知道怎么做?我尝试了一些事情,但我真的迷失了。

4 个答案:

答案 0 :(得分:0)

您可以将文件转换为Buffer对象,并将上传(使用fs也可以)上传到您的API。一旦你在你的lambda中收到它作为params的一部分,你就可以将它再次转换回csv并将其写入/上传到S3 /转换为base64并存储在db中,无论你的架构建议采用哪种方法。

答案 1 :(得分:0)

我不会将API网关带入等式中。您上传到API网关时存在大小限制。

  

浏览器 - CloudFront - S3 Bucket(触发器) - Lambda

如果要保护端点上传到S3,可以使用SignedURL保护端点。

  

浏览器 - CloudFront - APIGW - Lambda(返回SignedURL) - 上传   通过以上步骤

上传文件后,您可以从Lambda读取S3对象/文件并从那里进行处理。

答案 2 :(得分:0)

在我的项目中,我就是这样做的:

  1. 前端将文件转换为base64字符串。
  2. 然后将Base64字符串包含在JSON有效内容中。
  3. 将JSON有效负载发送到API网关POST端点。
  4. API Gateway触发Lambda处理程序,然后将Base64字符串转换为nodejs Buffer对象。
  5. Buffer对象传递给aws-sdk的{​​{1}}方法,该方法返回上传对象的S3键。
  6. 然后我会将这个S3密钥保存到数据库中。
  7. 请注意,此方法对文件大小(API网关限制)有限制,因此我的前端会在发送到API之前检查此限制。

    如果您想要超越API Gateway的限制,您必须直接从客户端或前端上传到S3。

答案 3 :(得分:0)

正如我在问题中所说,我不需要保存文件。我将文件数据通过API网关(代理模式)传递给lambda函数,使用parse-multipart解析数据并使用node-xlsx解析部分缓冲区以获得可读数据。