Как исправить ошибку «413 Request Entity Too Large» в Node.js - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь разрешить пользователям загружать на свой веб-сайт несколько изображений, которые затем будут отправлены всем пользователям по электронной почте в виде вложений, но я сталкиваюсь с ошибкой, сообщающей, что размер файла слишком велик.

Я использую Mailgun для отправки почты, Cloudinary для загрузки / хранения изображений, MongoDB в качестве моей базы данных, request.js для запроса изображений, Cloud 9 для разработки и Node.js / Express в качестве моего бэкэнда.

Пользовательский процесс выглядит так:

  • Пользователь отправляет фотографии на сайт
  • Изображения загружаются через Cloudinary, а прямая ссылка на каждое изображение сохраняется в базе данных MongoDB
  • Почта отправляется через Mailgun для информирования пользователей о новом сообщении с изображениями, добавленными в виде вложений

Я использую request.js для запроса изображений из Cloudinary, а затем помещаю каждое изображение в массив, который затем добавляется в качестве параметра вложения для Mailgun.

Это прекрасно работает для небольших изображений, но когда пользователь загружает большую серию высококачественных изображений, я получаю сообщение об ошибке.

Я попытался добавить ограничение размера файла 100 МБ в Multer, bodyParser.json и bodyParser.urlencoded, а также параметр Limit в 100 МБ.

var upload = multer({ storage: storage, fileFilter: imageFilter, limits: {fileSize: 100000000}});

app.use(bodyParser.json({limit: "100mb", parameterLimit: 100000000}));
app.use(bodyParser.urlencoded({limit: '100mb', extended: true, parameterLimit: 100000000}));

var images = [];
post.images.forEach(function(photo){
    images.push(request(photo));
});

var data =  {
    from: "email <email@email.com>",
    to: "email@email.com",
    subject: 'this is an email',
    html: 'this is an email',
    attachment: images
};

Ожидаемые результаты - успешное электронное письмо со всеми прикрепленными изображениями.

Фактический результат - это сообщение об ошибке:

{ Error: <html>
<head><title>413 Request Entity Too Large</title></head>
<body bgcolor="white">
<center><h1>413 Request Entity Too Large</h1></center>
<hr><center>nginx</center>
</body>
</html>

at IncomingMessage.res.on (/home/ubuntu/workspace/TW/node_modules/mailgun-js/lib/request.js:319:17)
at emitNone (events.js:111:20)
at IncomingMessage.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9) statusCode: 413 }

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Проблема закончилась тем, что я вообще не был nginx, я пытался отправить изображения по электронной почте в виде вложений через Mailgun, жесткое ограничение которых составляет 25 МБ.

После редактирования этой строки в разделе, где пользователи могут загружать изображения, все работает отлично:

let result = await cloudinary.v2.uploader.upload(file.path, {width: 1280, height: 720, crop: "limit"});
0 голосов
/ 21 января 2019

Похоже, проблема здесь в том, что у вас есть сервер Nginx, работающий перед вашим узлом, который по умолчанию имеет небольшой размер. Смотрите этот вопрос, чтобы узнать, как установить ограничение размера: Ограничение размера заголовка жесткого кода / значения времени ожидания в Nginx

...