amazon-web-services - 通过 AWS API Gateway 后 JPG 损坏
问题描述
我目前正在将 Web 服务移动到 AWS API 网关后面,并且在上传 jpeg 时遇到了麻烦。
此时的网关只是一个代理。有一个 ANY 资源只是将所有内容代理到具有相同路径的服务(现在它主要只是为了在服务移动域时在旧 url 上提供 https 支持)。代理的内容处理设置为直通,因此不应重新编码任何内容。
但是当我现在在表单数据请求中上传 jpg 时,上传的图像在那里,但无法打开。尝试打开它们时出现错误:
Not a JPEG file: starts with 0xef 0xbf
现在我现在你在想什么,你想告诉我我的 jpg 实际上是一个 png。相信我,它不是。提供这些图像的管道多年来一直可靠运行,我可以在上传 jpg 之前打开它们,如果我将它们重命名为 .png,我也无法打开服务器上的文件。不知何故,API 网关似乎破坏了通过的表单数据。
所以我在通过网关之前和之后对图像进行了一些Hexing。内容是相同的,除了文件中的第一个字节。在图像通过网关之前,文件的开头如下所示:
FF D8 FF E1 FF FE
上传后,替换为:
EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD EF BF BD
否则文件是相同的。为什么网关会这样做,我该如何阻止它?(根据网关日志,传入请求的内容类型标头是image/jpeg,所以也不应该有问题......)
解决方案
根据评论。
该问题是由于未在 API 网关中设置二进制媒体类型引起的:
在 API Gateway 中,API 请求和响应具有文本或二进制负载。文本负载是 UTF-8 编码的 JSON 字符串。二进制有效负载不是文本有效负载。例如,二进制有效负载可以是JPEG 文件、GZip 文件或 XML 文件。
您必须对函数的响应进行 base64 编码。您还必须为您的 API 配置 binaryMediaTypes。
推荐阅读
- ios - 通用链接未使用子文件夹名称打开,仅在域名时有效
- python - 如何过滤出 Pandas DataFrame 中包含列表列中特定子序列的行?
- c++ - 递减/非递增向量的下限和上限
- netbeans - NetBeans 12.3 - 代码完成和代码建议非常慢
- rest - Power BI REST API ExportToFileInGroup 不工作
- javascript - 空的时如何将蓄能器散布在减速器中?
- ssas-tabular - SSAS 表格模型使用遥测
- android - 每次在Android中更改选择时如何重置函数调用
- python - to_csv 保存 groupby 数据框的问题
- excel - VBA使用选定的列过滤器创建一个新的数据透视表