我是lambda和API Gateway的新手。我使用这些服务做了很简单的事情,但是现在我有一个要求用户可以上传excel文件的要求。上传过程只是触发一个与lambda函数集成的API网关端点。我不想保存文件,我只想将文件数据以CSV / JSON格式发送到我的lambda函数(nodejs代码),然后处理/转换/保存数据。有谁知道怎么做?我尝试了一些事情,但我真的迷失了。
答案 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)
在我的项目中,我就是这样做的:
POST
端点。Buffer
对象。Buffer
对象传递给aws-sdk
的{{1}}方法,该方法返回上传对象的S3键。请注意,此方法对文件大小(API网关限制)有限制,因此我的前端会在发送到API之前检查此限制。
如果您想要超越API Gateway的限制,您必须直接从客户端或前端上传到S3。
答案 3 :(得分:0)
正如我在问题中所说,我不需要保存文件。我将文件数据通过API网关(代理模式)传递给lambda函数,使用parse-multipart
解析数据并使用node-xlsx
解析部分缓冲区以获得可读数据。