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 标头和权限?