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

Ios 如何将文件上载到lambda函数或API网关?,ios,amazon-web-services,aws-lambda,aws-api-gateway,Ios,Amazon Web Services,Aws Lambda,Aws Api Gateway,我正在尝试将文件从iOS上传到AWSAPI网关并通过它传递到Lambda函数,我如何实现这个场景 我可以使用多部分/表单数据上传到AWS API网关,但如何使输入模型支持二进制数据 [Edit1]从Spektre的回答中移出 感谢您的回复,经过一点阅读,我发现无法将文件上载到lambda(因为它是基于事件的,所以不符合逻辑),这是上载到S3并使S3通知lambda的唯一有效用例。我强烈建议使用AWS SDK之一使用directS3上载AWS Lambda只适合处理短事件,而不适合像上传那样进行内

我正在尝试将文件从iOS上传到AWSAPI网关并通过它传递到Lambda函数,我如何实现这个场景

我可以使用多部分/表单数据上传到AWS API网关,但如何使输入模型支持二进制数据

[Edit1]从Spektre的回答中移出


感谢您的回复,经过一点阅读,我发现无法将文件上载到lambda(因为它是基于事件的,所以不符合逻辑),这是上载到S3并使S3通知lambda的唯一有效用例。

我强烈建议使用
AWS SDK之一使用direct
S3
上载
AWS Lambda
只适合处理短事件,而不适合像上传那样进行内容传输。您可以检查它的账单和限制,以便对它是否真的是您想要的东西做出更明智的决定。

API网关增加了对S3代理的支持。这允许您将文件上载直接公开到S3


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

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

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

添加以下媒体类型:

多部分/表单数据

保存您的更改

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

最后部署您的api


欲了解更多信息,请访问:

这并不完全正确,尤其是现在。文件上传有5分钟的超时时间——如果您的文件上传无法在这段时间内完成,则应用程序需要进行架构审查。直接上传到S3有其优缺点——安全性、数据转换限制等。以上不是建议,而是警告——没有真正的理由不使用Lambda进行文件上传。使用S3从网站上传,虽然在许多情况下非常有用,但会创建另一层处理。通过直接上传到Lambda,您可以在上传时进行转换,并将结果发布到S3一次。另一方面,上传到S3首先需要调用Lambda函数来转换文件,然后将其再次保存到不同的bucket(或路径)中。任何事情都有其优缺点——没有正确的答案,尤其是没有更多的信息。使用S3可能会创建另一层处理,但它可以普遍工作。通过API Gateway上传到Lambda有问题,对于微小的上传来说可能没问题,但一旦你达到1MB-10MB-100MB或GB级别,需要多个部分,使用API Gateway/Lambda就会遇到困难。我没有听说过上传有任何问题。无论哪种方式,它都取决于您的要求,例如限制、预处理、重定向到多个目标、缓存等的能力。API网关的最大超时时间为29秒,5分钟的Lambda超时时间无关紧要,29秒对于处理文件上载来说是非常严格的,所以,唯一的方法是让API网关+Lambda返回一个签名的S3URL来发布文件,这样就根本不用使用API网关了。[Edit1]由@kixorz作出的响应由Spektre从无效答案中删除:您需要配置您的集成请求和内容类型,然后您可以像上载到任何其他web服务一样进行上载。这是否有大小限制?我可以用这个上传大于100MB的文件吗?您仍然会遇到29秒的最大API网关集成超时: