【问题标题】:Get non file body from multipart/form-data using AWS API Gateway and Lambda使用 AWS API Gateway 和 Lambda 从 multipart/form-data 获取非文件正文
【发布时间】:2016-03-03 01:52:46
【问题描述】:

我正在尝试通过 API Gateway 将表单数据从 multipart/form-data POST 获取到我的 ASW Lambda Web 服务。

HTTP POST 具有内容类型“multipart/form-data”和 URL 编码的正文。文件数据也在这篇文章中发送(因此我猜是多部分)。

Web 服务需要与第三方服务集成,因此无法更改POST 的格式。

我看到thread 谈到将 URL 编码数据转换为 JSON 对象以在 Lambda 中使用,但这并不能解决问题。

我还尝试将内容类型multipart/form-data集成请求 -> 映射模板设置为输入直通。这也没有帮助。

我确实遇到过另一个 question 关于使用 multipart/form-data 上传文件的信息,但由于我对文件不感兴趣,只对正文不感兴趣,所以这个答案没有帮助。

在下面找到通过 runscope 捕获的帖子的屏幕截图(抱歉)。

【问题讨论】:

  • 你能举个帖子正文的例子吗?
  • @Ryan 更新了帖子的截图。

标签: forms amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

如果目标是使用 Lambda,您需要将有效的 JSON 传递给函数。目前没有办法在 Api Gateway 内对非 JSON 数据形式的数据进行 JSON 化处理。

我们的短期解决方案(在我们的积压工作中)是在映射模板中提供一个变量来获取请求的原始输入。这样您就可以使用如下模板进行简单的 JSON 转换:

{
    "body" : "$input.body"
}

或类似的东西。

查看映射模板参考以获取更多信息:http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html

编辑 4/7 - 功能已作为 $input.body 发布

【讨论】:

  • 感谢您的回答。我怀疑这是一个仅限 JSON 的服务。 (考虑到大多数 Web API 的发展方向,这并不算太不合理。)我通过在两者之间放置另一个服务来解决这个限制,这就是翻译。
  • 嗨@Jack 这个$input.raw 变量可用了吗?
  • 还没有,我们仍在努力处理积压的许多其他项目。不幸的是,此时没有预计到达时间。抱歉!
  • 嘿@JackKohn-AWS,我认为如果没有这个功能,就无法使用签名来验证来自像 Github - developer.github.com/webhooks/securing 这样的 webhook 的传入请求。这对我们来说是一个非常有限的功能。任何更新的预计到达时间?
  • 为了回答我上面的问题,AWS 添加了一个名为 "$input.body" 的映射,请参阅 - forums.aws.amazon.com/thread.jspa?threadID=228067
猜你喜欢
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 2011-11-19
  • 2020-07-14
  • 2016-11-30
  • 2016-12-14
相关资源
最近更新 更多