我编写了一个小的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"
}
}