如何将文件上传到lambda函数或API网关?

Hen*_*wey 12 amazon-web-services ios aws-lambda aws-api-gateway

我尝试将文件从iOS上传到AWS API网关并通过它传递给Lambda函数,我该如何实现这种情况?

我可以使用multipart/form-data上传到AWS API Gateway但是如何使输入Model支持二进制数据?

[Edit1]从Spektre的回答中移开

谢谢对于响应,经过一些阅读后我发现无法将文件上传到lambda(并且它不合逻辑因为它是基于事件的)并且是上传到S3并使S3通知lambda的唯一有效用例.

var*_*d11 13

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

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

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

添加以下媒体类型:

多部分/表单数据

保存您的更改。

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

最后部署你的 api。

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


kix*_*orz 12

我强烈建议S3使用其中一个直接上传AWS SDKs.AWS Lambda适合处理短事件,而不是上传等内容传输.您可以检查其结算和限制,以便做出更明智的决定,看看它是否真的是您正在寻找的东西.

  • 这不完全正确,特别是现在.文件上传时间超过5分钟 - 如果您的文件上传无法在此时间内完成,则应用需要进行体系结构审核.直接上传到S3有它的优点和缺点 - 安全性,数据转换限制等. (4认同)
  • 以上不是推荐,而是警告 - 没有真正的理由不使用Lambda进行文件上传.使用S3从网站上传虽然在许多情况下非常有用,但却创建了另一层处理.通过直接上传到Lambda,您可以在上传时进行转换,并将结果发布到S3一次.另一方面,首先上传到S3需要调用Lambda函数来转换文件,然后将其再次保存到不同的存储桶(或路径).一切都有它的优点和缺点 - 没有正确答案,特别是没有更多信息. (4认同)
  • 使用S3可能会创建另一层处理,但它可以普遍使用.通过API网关上传到Lambda有问题,对于微小的上传,它可能没问题,但是一旦你达到1MB-10MB-100MB或GB级别你需要多部分,你就会遇到使用API​​ Gateway/Lambda的难题. (4认同)
  • 我没有听说过上传的任何问题.这两种方式都取决于您的要求,例如节流,预处理,重定向到多个目的地,缓存等的能力. (3认同)
  • 虽然你的Lambda将运行5分钟,这对于MB顺序中的文件来说是足够的时间,但它肯定比将它们上传到S3并通过上传触发lambda更昂贵. (2认同)
  • API网关有超过29秒的超时,5分钟的Lambda超时无关紧要,29秒对于处理文件上传非常有限,所以关于这样做的唯一方法是让API Gateway + Lambda返回一个签名的S3 URL到POST文件以便您根本不使用API​​网关.https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html (2认同)

wes*_*n16 10

API Gateway增加了对S3 Proxy的支持.这允许您直接将文件上载到S3.

http://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html

  • 您仍然遇到29秒最大API网关集成超时:https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html (2认同)