在 API 网关中处理来自 Lambda 的图像/jpeg 响应

问题描述 投票:0回答:1

我已经花了好几个小时试图解决我的问题,但我终其一生都无法解决。

我有一个 API,可以简单地从另一个 API 获取图像。我想做的就是运行 GET 请求,响应是图像。

我正在使用 AWS 服务 Lambda 和 API Gateway - 我遵循了我在网上可以看到的每个实现,但它并没有按照我需要的方式工作。

我有一个端点,一个运行 Lambda 代理集成的 GET 请求

API Gateway Integration Request

当调用它时,它会运行我的 Lambda 函数,如下所示。这是一个 Base64 响应,这就是我所读到的需要在 Lambda 中处理的方式。

Lambda Function

我还了解到我需要专门添加二进制媒体类型,以便 API Gateway 知道如何处理响应。现在这是关键问题,当我将二进制媒体类型设置为

*/*
时,它会按预期工作,浏览器中返回图像,但是现在这会将我所有的 API 响应转换为二进制,这并不理想,因为通常它们是 json - 因此,我只想转换图像。当我使用已在 API Gateway 中配置为我的响应正文以及 Lambda 中的响应标头的
image/jpeg
时,我不再看不到该图像。 请参阅下面的二进制媒体类型配置示例 enter image description here

请参阅下面的 API 响应示例,将二进制媒体类型设置为

image/jpeg
时如何在浏览器中查看图像 No image from API

请参阅下面的 API 响应示例,了解将二进制媒体类型设置为

*/*
时如何在浏览器中查看图像(按我想要的方式运行) Image from API

真正让我失望的是,当我在邮递员中测试我的 API 时,将二进制媒体类型设置为

*/*
我可以看到图像,但查看响应标头我可以清楚地看到它已设置为
 image/jpeg
所以我不明白为什么API网关在我期望的时候不起作用。 enter image description here

amazon-web-services aws-lambda aws-api-gateway
1个回答
0
投票

我发现问题是因为如果您以

image/jpeg
的形式指定二进制媒体类型,则需要将
Accept Header
添加到您的
GET Request
中。您的接受标头必须明确声明
image/jpeg

它在浏览器中不起作用的原因是因为我没有传递任何接受标头。当我使用Postman等工具时,我没有遇到任何问题,并得到了我期望的响应。

幸运的是,我将来可以将接受标头添加到我的 API 请求中。 但是,如果您是一名程序员,希望能够纯粹从浏览器请求获取图像,那么这不会是您正在寻找的答案。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.