aws-lambda - 如何操作 AWS API Gateway Lambda LAMBDA_PROXY 集成的请求接受标头
问题描述
我编写了一个小型 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 网关的请求,以便所有请求都设置了“接受:图像/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/*'
包.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"
}
}
解决方案
推荐阅读
- html - debounce (AfterValueChanged) 无法正常工作
- django - Django admin:内联模型:如何从 has_delete_permission 方法访问当前记录 id
- visual-c++ - 链接列表创建头部导致错误 C2143:语法错误:缺少“;” 前 '*'
- c - 可变大小的二维数组声明错误吗?
- qualtrics - 如何将选定的选项以其嵌入的价值带入下一个问题以进行进一步评估?
- laravel - 如何正确连接 Nuxt.js 与 laravel 后端?
- google-app-engine - 如何使用 Google App Engine 代理端点
- python - 为树生成干净的 __str__ 方法的算法
- php - PHP解析具有多个孩子的xml文件:我只得到第一个
- hyperledger-fabric - Hyperledger Composer 网络升级后如何查看旧数据?