Я написал небольшую лямбда-функцию и развернул ее в 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"
}
}