13

我正在尝试使用 AWS API Gateway 作为图像服务前的代理。我能够让图像通过,但它显示为一大块 ASCII,因为 Content-Type 设置为“application/json”。

有没有办法告诉网关根本不要更改源内容类型?

我只想通过“image/jpeg”、“image/png”等。

4

3 回答 3

5

我试图格式化一个字符串以不带引号返回,并发现了集成响应功能。我自己没有尝试过这个修复,但是这些方面的东西应该可以工作:

  • 转到资源的方法执行页面,
  • 单击集成响应,
  • 展开方法响应状态 200,
  • 展开映射模板,
  • 点击“应用程序/json”,
  • 单击输出直通旁边的铅笔,
  • 将“应用程序/json”更改为“图像/png”

希望它有效!

于 2015-10-06T03:14:32.300 回答
4

我提前道歉,因为给出的答案没有直接回答问题,而是建议您采用不同的方法......但基于问题和评论,以及我自己对我认为是类似应用程序的经验,看起来您可能使用了错误的工具来解决问题,或者至少是在 AWS 生态系统中不是最佳选择的工具。

如果您的图像服务在 Amazon Lambda 中运行,则对 API Gateway 的需求会更加明显。没有它,我看不到它。

Amazon CloudFront 提供从后端服务器获取内容、缓存内容(在全球超过 50 个“边缘”位置)、缓存内容的存储免费,并且您可以配置多达 100 个指向单个 Cloudfront 的不同主机名分发,除了默认xxxxxxxx.cloudfront.net主机名。它还支持 SSL。这似乎是你想要做的,然后是一些。

我使用它,非常成功地用于您描述的场景:“图像服务前面的代理”。我的图像服务和您的图像服务所做的确切内容可能不同(我的图像服务是一个调整大小,可以查找丢失/从未在请求​​图像之前的源 URL、获取和调整大小),但从根本上看,我们似乎正在完成类似的目的.

奇怪的是,CloudFront 在某些地区(例如 us-east-1 和 us-west-2)的定价结构不仅具有成本效益,而且实际上使用 CloudFront 可以比不使用它便宜近 0.005美元技嘉下载的。

就我而言,除了后端图像服务之外,我还有一个 S3 存储桶,其中包含一个文件,附加到 CloudFront 分配中的单个路径(作为第二个“自定义源”),仅用于的服务/robots.txt,以控制行为良好的爬虫对我的图像的直接访问。这允许将 robots.txt 文件与图像服务本身分开管理。

如果这似乎不能满足您的需求,请随时发表评论,我将澄清或撤回此答案。

于 2015-07-25T20:13:32.380 回答
3

@kjsc:我们终于弄清楚了如何使用 base64 编码的图像数据解决另一个问题,您可能会发现这对您的解决方案很有帮助:

AWS Gateway API base64Decode 产生乱码二进制文件?

要回答您的问题,要将 Content-Type 作为硬编码值通过,您首先需要进入方法响应屏幕并添加 Content-Type 标头和您想要的任何 Content 类型。

api网关方法响应

然后您将进入集成响应屏幕并将内容类型设置为您想要的值(在本例中为 image/png)。将 'image/png' 用单引号括起来。

在此处输入图像描述

于 2017-01-03T21:05:15.213 回答