如何使用Lambda / API Gateway将大于10MB的csv文件上传到S3
问题的原因是上传大于10MB的csv文件到S3时,通过Lambda和API Gateway进行传输存在一些困难。解决方法是直接将文件发送到S3,而不是通过API Gateway发送到Lambda。使用S3的签名URL功能可以确保安全地上传文件到受保护的存储桶。
具体的解决方法如下:
1. 前端发送请求到API Gateway;
2. API Gateway将请求转发给Lambda函数;
3. Lambda函数生成一个带有权限的签名URL,用于将对象上传到特定的S3存储桶;
4. API Gateway将Lambda函数的响应发送回前端,前端使用签名URL上传文件。
生成签名URL需要在Lambda函数中使用aws-sdk库的getSignedUrl方法。更多关于签名URL的信息可以在这里找到:https://docs.aws.amazon.com/AmazonS3/latest/dev/PresignedUrlUploadObject.html。
在Lambda函数中使用Node.js时,可以参考以下链接中的示例代码:stackoverflow.com/questions/38831829/…。
如果在Postman中测试时出现"Request Entity Too Large"错误,请确保将文件发送到签名URL而不是API Gateway。如果需要,可以在GitHub Gist或者其他地方分享Lambda函数的代码以便进行更详细的排查。