如何处理AWS API Gateway Lambda LAMBDA_PROXY集成的请求接受标头

时间:2019-05-04 13:47:45

标签: aws-lambda aws-api-gateway serverless-framework

我编写了一个小的lambda函数,并使用无服务器框架将其部署到了AWS。它提供了一个返回png文件的功能。

  • 在浏览器中打开资源时,它会正确加载png。

  • 使用curl curl "https://******.execute-api.us-east-1.amazonaws.com/dev/image.png"请求时,它会生成图像的base64编码版本。

  • 当我在命令行中使用Accept标头curl -H "Accept: image/png" https://******.execute-api.us-east-1.amazonaws.com/dev/image.png"请求时,它会生成图像的二进制image/png版本。

如何处理对API网关的请求,以使所有请求都设置为“ Accept:image / png”(无论来源如何)?还是有另一种方法来确保响应始终是二进制而不是base64?

源代码

处理程序代码从磁盘加载png图像,然后返回带有base64编码图像输出的响应对象。

// handler.js
'use strict';

const fs = require('fs');
const image = fs.readFileSync('./1200x600.png');

module.exports = {
    image: async (event) => {
        return {
            statusCode: 200,
            headers: {
                "Content-Type": "image/png",
            },
            isBase64Encoded: true,
            body: image.toString('base64'),
        };
    },
};

无服务器配置可设置功能,并使用“ serverless-apigw-binary”和“ serverless-apigwy-binary”插件设置响应的内容处理和二进制mime类型。

# serverless.yml
service: serverless-png-facebook-test

provider:
  name: aws
  runtime: nodejs8.10

functions:
  image:
    handler: handler.image
    memorySize: 128
    events:
      - http:
          path: image.png
          method: get
          contentHandling: CONVERT_TO_BINARY

plugins:
  - serverless-apigw-binary
  - serverless-apigwy-binary

custom:
  apigwBinary:
    types:
      - 'image/*'

package.json

{
  "name": "serverless-png-facebook-test",
  "version": "1.0.0",
  "main": "handler.js",
  "license": "MIT",
  "dependencies": {
    "serverless-apigw-binary": "^0.4.4",
    "serverless-apigwy-binary": "^1.0.0"
  }
}

0 个答案:

没有答案