如何修复Node.js中的``413请求实体太大''错误

时间:2019-01-21 00:06:40

标签: node.js express multer mailgun cloudinary

我正在尝试允许用户将多个图像上传到我的网站,然后将这些图像作为附件通过电子邮件发送给所有用户,但是遇到一个错误,指出文件大小太大。

我正在使用Mailgun发送邮件,使用Cloudinary上传/存储图像,使用MongoDB作为我的数据库,使用request.js请求图像,使用Cloud 9进行开发,并使用Node.js / Express作为我的后端。 / p>

用户流程如下:

  • 用户将图片提交到网站上
  • 图片通过Cloudinary上传,每个图片的直接链接保存在MongoDB数据库中
  • 邮件通过Mailgun发出通知,通知用户新帖子,其中包含添加为附件的图像

我正在使用request.js从Cloudinary请求图像,然后将每个图像推入一个数组,然后将其添加为Mailgun的附件参数。

这对于较小的图像效果很好,但是当用户上传大量的高质量图像时,我会收到错误消息。

我尝试为Multer,bodyParser.json和bodyParser.urlencoded以及100MB的parameterLimit添加100MB的文件大小限制。

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 :(得分:0)

这里的问题似乎是您在节点一的前面运行了一个Nginx服务器,该服务器的默认大小限制很小。有关如何设置大小限制的信息,请参见以下问题:Hardcode header size limit / timeout values in Nginx

答案 1 :(得分:0)

问题最终根本不是nginx,我试图通过Mailgun通过电子邮件将图像作为附件发送,并且硬限制为25MB。

在用户可以上传图像的部分中编辑此行之后,一切运行正常:

api