gpt4 book ai didi

amazon-web-services - 使用 AWS Lambda 下载文件

转载 作者:行者123 更新时间:2023-12-01 12:11:50 25 4
gpt4 key购买 nike

我有一个调用 AWS Lambda 函数的 iOS 应用程序。我希望 Lambda 函数通过 Lambda 代理功能从服务器获取一些文件并将其发送回 iOS 应用程序。

我使用生成的 SDK 从我的应用程序中直接调用 Lambda 函数。我找不到解释如何交换 JSON 编码请求以外的数据的文档。

我该怎么办?

最佳答案

Lambda 与外界的唯一接口(interface)是 JSON。

要从 Lambda 返回文本数据,您必须将其作为字符串返回,并从 JSON 响应中反序列化该字符串。

要从 Lambda 返回二进制数据,必须首先使用一种编码对数据进行转换(编码),该编码永远不会产生一系列不是有效 UTF-8 字符序列的字节,因为 JSON 无法序列化非字符数据(和并非所有可能的字节组合都对应一个或多个有效字符)。执行此操作的常用策略是使用 base-64 编码。 Base-64 使用 8:6 的转换比率(每字节编码 6 位)无损地将一系列字节(八位字节)转换为不同的字节系列,这些字节也始终是有效的 7 位 ASCII 字符。然后,您需要将此数据从 base-64 解码回二进制。

您可以在客户端上对 JSON 和 base-64 进行解码,但如果您不喜欢这个想法,还有其他几个选项。

如果您不想在客户端执行此操作,API Gateway 和 CloudFront 的 Lambda@Edge 功能都提供内置转换功能,可将 base-64 有效负载(来自 JSON Lambda 响应)转换回二进制文件。

API Gateway 支持所有 Lambda 运行时,以及 expects这种格式...

"isBase64Encoded": true,
"body": "the-base-64-encoded-body",

Lambda@Edge 仅支持 Node.js Lambda 函数,但比 API Gateway 便宜。它 expects一个 base-64 响应,包括...
"body": "the-base-64-encoded-body",
"bodyEncoding": "base64",

这两种方法的可行性取决于您的安全需求。 API Gateway 支持通过 IAM 以及其他机制进行身份验证。 CloudFront + Lambda@Edge 不支持 IAM 身份验证,但可以与 CloudFront 签名 URL 或 Cognito 或其他自定义授权机制一起使用。

如果您提到的"file"来自服务器,API Gateway 也可以直接从服务器代理这些文件,无需 Lambda 函数处理内容(尽管根据您的安全需求,可能需要 Lambda 自定义授权器来进行身份验证请求,然后简单地告诉 API Gateway 允许将请求转发到后端)。

或者,如果文件是来自 S3 的对象,那么您可以直接访问 S3,类似于您现在访问 Lambda 的方式。

关于amazon-web-services - 使用 AWS Lambda 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51219067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com