Вот моя настройка:
Я использую response + aws ampify на интерфейсе, чтобы загрузить файл следующим образом:
const url =
"https://some.execute-api.us-east-1.amazonaws.com/dev/upload-book";
var formData = new FormData();
formData.append("file", file);
const response = await fetch(url, {
method: "POST",
body: formData,
});
Маршрут шлюза API: /upload-book
Маршрут шлюза API -> Параметры -> Запрос интеграции -> Шаблоны сопоставления:
When no template matches the request Content-Type header
выбрано multipart/form-data
= {"statusCode": 200}
AWS Лямбда index.js
:
const awsServerlessExpress = require('aws-serverless-express');
const app = require('./app');
const binaryMimeTypes = [
'application/javascript',
'application/json',
'application/octet-stream',
'application/xml',
'font/eot',
'font/opentype',
'font/otf',
'image/jpeg',
'image/png',
'image/svg+xml',
'text/comma-separated-values',
'text/css',
'text/html',
'text/javascript',
'text/plain',
'text/text',
'text/xml',
'text/json',
'multipart/form-data'
]
const server = awsServerlessExpress.createServer(app, null, binaryMimeTypes);
exports.handler = (event, context) => {
console.log(`EVENT: ${JSON.stringify(event)}`);
awsServerlessExpress.proxy(server, event, context);
};
console.log
здесь дает правильное event.body
значение
my app.js
выглядит следующим образом:
var express = require("express");
var bodyParser = require("body-parser");
var awsServerlessExpressMiddleware = require("aws-serverless-express/middleware");
// declare a new express app
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(awsServerlessExpressMiddleware.eventContext());
// Enable CORS for all methods
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
next();
});
app.post("/upload-book", function (req, res) {
res.json({
success: "post call succeed!",
statusCode: 200,
headers: {
"Access-Control-Allow-Origin": "*",
},
url: req.url,
body: req.body,
});
});
app.listen(3000, function () {
console.log("App started");
});
module.exports = app;
в этом маршруте app.post("/upload-book", function (req, res)
req.body
имеет значение {}
пустой объект, а req.apiGateway.event.body
равно undefined
Что мне не хватает?