AWS Api Gateway 作为 HTTP 代理正在破坏上传的二进制图像文件

Posted

技术标签:

【中文标题】AWS Api Gateway 作为 HTTP 代理正在破坏上传的二进制图像文件【英文标题】:AWS Api Gateway as a HTTP Proxy is currupting binary uploaded image files 【发布时间】:2019-03-14 11:38:45 【问题描述】:

我有一个 ruby​​ on rails 应用程序,它获取图像文件,“将其附加到成员”,然后将其上传到 s3。当我使用 insomnia 并直接 POST 到应用程序时...它可以工作,但是当我在 AWS Api Gateway 后面使用完全相同的端点时,图像已损坏且不可见。


这是请求的比较。

LEFT = 直接发布到 rails 应用 RIGHT = 通过 api 网关

https://www.diffchecker.com/wwUmpB5W

我注意到,回形​​针 gem 正在运行不同的命令。很明显,回形针在通过 API 网关时意识到文件不是图像。


以下是一些可能相关的屏幕截图


这是 Rails 代码:

def create
  logger.info 'upload_attachment_api_general_v1'
  logger.info params
  logger.info request.env
  @file = current_merchant.members.find(params[:member_id]).attachments.new(file: params[:file], label: params[:label])
  if params[:file] && @file.save
    render json: @file
  else
    render json: @file.errors, status: :unprocessable_entity
  end
end

【问题讨论】:

【参考方案1】:

我想通了。内容类型不是image/png ...内容类型是multipart/form-data

【讨论】:

谢谢!我不知道怎么做,但这确实对 PNG 图像有用。它还解释了为什么image/* 对我不起作用,但*/* 起作用了。它仍然不适用于 .ICO 图像(例如 favicon.ico),但没有其他功能,所以我将其归结为 API Gateway 的怪癖。 一个快速说明,您仍然需要在进行设置调整后再次部署 api。这对其他人来说可能很明显,但对我来说却不是。

以上是关于AWS Api Gateway 作为 HTTP 代理正在破坏上传的二进制图像文件的主要内容,如果未能解决你的问题,请参考以下文章

HTTP/2 推送 AWS API Gateway + Lambda

HTTP 请求正文未通过 AWS API Gateway 访问 AWS lambda 函数

AWS API Gateway 集成请求 Http 标头未传递给 lambda

使用 HTTP 代理访问 AWS API Gateway 中的标头?

是否可以使用 AWS API 为 Lambda 函数设置 AWS API Gateway 端点?

AWS API Gateway + Cognito 用户池授权方 + Lambda - 我需要设置哪些 HTTP 标头和权限?