AWS API网关二进制损坏

时间:2019-01-25 14:40:06

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

我遇到一个问题,我的API网关+ Lambda集成正在通过API网关进行某种形式的内容映射。

我的API网关的端点使用Lambda代理集成。

我已启用二进制媒体类型: 图片/ jpeg 图片/ png 图片/ Webp 图片/* /

终结点会拍摄图像,并根据您使用的浏览器将其优化为jpeg或webp。

使用Firefox可以按预期返回图像/ jpeg。

在Chrome中查看(返回webp文件)会导致返回一个方框。 (这一切都适用于Elastic Beanstalk,所以我知道这是一个网关问题)

在Chrome中,我可以看到某种映射正在发生:

content-length: 4710
content-type: image/webp
status: 200
x-amz-apigw-id: UEG2ZE8vDoEFR8A=
x-amzn-remapped-content-length: 2580
x-amzn-requestid: 6217195f-20ae-11e9-9faf-ebf6a6f5765d
x-amzn-trace-id: Root=1-5c4b1e8f-cab2e4fd2564412ef5914509;Sampled=0

值:x-amzn-remapped-content-length 是应返回的长度。我不确定哪个进程在歪曲数据的返回。

代理集成设置 Proxy Integration Setup

API网关配置 API Gateway Configuration

1 个答案:

答案 0 :(得分:0)

对于在此问题上遇到的其他问题,我需要在Lambda入口点中注册二进制类型,请参见下文:

public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
{
    protected override void Init(IWebHostBuilder builder)
    {
        // Register any MIME content types you want treated as binary
        RegisterResponseContentEncodingForContentType("image/jpeg", ResponseContentEncoding.Base64);
        RegisterResponseContentEncodingForContentType("image/webp", ResponseContentEncoding.Base64);
        RegisterResponseContentEncodingForContentType("image/png", ResponseContentEncoding.Base64);

        builder
            .UseStartup<Startup>();
    }
}