通过AWS API Gateway返回图像

kjs*_*js3 12 amazon-web-services aws-api-gateway

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

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

我只想通过"image/jpeg","image/png"等来实现.

tgi*_*gig 5

我试图格式化一个没有引号的字符串,并发现了集成响应功能.我自己没有尝试过这个问题,但是这些内容应该有效:

  • 转到资源的Method Execution页面,
  • 单击Integration Response,
  • 展开方法响应状态200,
  • 展开映射模板,
  • 点击"application/json",
  • 单击Output Passthrough旁边的铅笔,
  • 将"application/json"更改为"image/png"

希望它有效!


Mic*_*bot 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 文件与影像服务本身分开管理。

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