Как загрузить файл, используя aws -serverless- express и лямбда? - PullRequest
0 голосов
/ 10 июля 2020

Вот моя настройка:

Я использую 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

Что мне не хватает?

...