通过AWS API Gateway返回图像

时间:2015-07-24 16:44:13

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

我尝试在图像服务前使用AWS API Gateway作为代理。 我可以让图像通过,但它会显示为一大块ASCII,因为Content-Type已设置为" application / json"。

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

我只想要" image / jpeg"," image / png"等等。

3 个答案:

答案 0 :(得分:5)

我试图格式化一个没有引号的字符串,并发现了Integration Response功能。我自己还没有尝试过这个问题,但是这些方面应该有用:

  • 转到资源的方法执行页面,
  • 点击“集成响应”,
  • 展开方法响应状态200,
  • 展开制图模板,
  • 点击" application / json",
  • 点击Output Passthrough旁边的铅笔,
  • 更改" application / json"到" image / png"

希望它有效!

答案 1 :(得分:4)

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

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

Amazon CloudFront提供从后端服务器获取内容,缓存内容(全局超过50"边缘"位置),缓存内容存储免费,您可以配置最多除默认xxxxxxxx.cloudfront.net主机名外,还有100个不同的主机名指向单个Cloudfront分发。它还支持SSL。这看起来就像你想要做的那样,然后是一些。

我使用它,非常成功地完全符合您所描述的场景:"图像服务前的代理。"我的图像服务和您的图像服务所做的事情可能完全不同(我的是一个可以查找丢失/从未请求的图像,获取和调整大小的源URL的缩放器)但从根本上看起来我们正在完成一个类似的目的。

奇怪的是,CloudFront在某些地区(例如us-east-1和us-west-2)的定价结构不仅具有成本效益,而且事实上使用CloudFront几乎可以比每千兆字节下载更便宜$ 0.005

在我的情况下,除了后端图像服务之外,我还有一个带有单个文件的S3存储桶,附加到CloudFront分配中的单个路径(作为第二个"自定义源&# 34;),仅用于提供/robots.txt,以控制行为良好的抓取工具对我的图像的直接访问。这允许robots.txt文件与图像服务本身分开管理。

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

答案 2 :(得分:2)

@kjsc:我们终于想出了如何使用base64编码的图像数据来解决这个问题,您可能会在解决方案中找到它们:

AWS Gateway API base64Decode produces garbled binary?

要回答您的问题,要将Content-Type作为硬编码值进行处理,您首先要进入方法响应屏幕并添加Content-Type标题以及您想要的任何内容类型。

api gateway method response

然后,您进入“集成响应”屏幕并将“内容”类型设置为所需的值(本例中为image / png)。换行' image / png'用单引号。

enter image description here