Aws lambda 如何操作AWS API网关Lambda Lambda_代理集成的请求接受头

Aws lambda 如何操作AWS API网关Lambda Lambda_代理集成的请求接受头,aws-lambda,aws-api-gateway,serverless-framework,Aws Lambda,Aws Api Gateway,Serverless Framework,我编写了一个小lambda函数,并使用无服务器框架部署到AWS。它提供了一个返回png文件的函数 在浏览器中打开资源时,它会正确加载png 当使用curlcurl“https://*****.execute api.us-east-1.amazonaws.com/dev/image.png”请求时,会生成图像的base64编码版本 // handler.js 'use strict'; const fs = require('fs'); const image = fs.readFileSy

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

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

  • 当使用curl
    curl“https://*****.execute api.us-east-1.amazonaws.com/dev/image.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'),
            };
        },
    };
    
  • 当我在命令行上使用
    Accept
    标题
    curl-H“Accept:image/png”https://*****.execute api.us-east-1.amazonaws.com/dev/image.png“
    请求时,它会生成图像的二进制
    image/png
    版本

  • // 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'),
            };
        },
    };
    
我如何操作对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'),
        };
    },
};
无服务器配置设置函数,并使用“无服务器apigw二进制”和“无服务器apigwy二进制”插件为响应设置内容处理和二进制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"
  }
}

特别是关于您的问题中要求通过API网关覆盖头的部分,您可以参考本手册:其主要思想是能够使用无服务器实现这一点。