【问题标题】:How to fix '413 Request Entity Too Large' error in Node.js如何修复 Node.js 中的“413 请求实体太大”错误
【发布时间】:2019-06-14 09:08:37
【问题描述】:

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

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

用户进程是这样​​的:

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

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

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

我尝试将 100MB 的文件大小限制添加到 Multer、bodyParser.json 和 bodyParser.urlencoded 以及 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 }

【问题讨论】:

  • 似乎错误来自 nginx,所以请求可能永远不会到达您的节点服务器?
  • @schu34 我可以给 nginx 添加限制吗?我以前从未听说过。
  • 如果问题是ngInx,那么配置文件应该是/etc/nginx/nginx.conf。此链接也可以提供帮助:stackoverflow.com/questions/24306335
  • @paulsm4 感谢您的帮助!我已经编辑了 nginx.conf 并重新启动了我的工作区,但仍然弹出错误。也许我编辑不正确?这是我的 http 部分的样子i.imgur.com/7eu0gy3.png

标签: node.js express multer mailgun cloudinary


【解决方案1】:

这里的问题似乎是你有一个 Nginx 服务器在你的节点前面运行,它的默认大小限制很小。请参阅此问题了解如何设置大小限制:Hardcode header size limit / timeout values in Nginx

【讨论】:

  • 我将如何在 Cloud 9 中执行此操作?我已经查找了 nginx.conf 文件,但找不到。
【解决方案2】:

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

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

let result = await cloudinary.v2.uploader.upload(file.path, {width: 1280, height: 720, crop: "limit"});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 2016-02-01
    • 1970-01-01
    • 2019-09-02
    • 2015-05-03
    • 2016-07-16
    • 2017-03-05
    • 2014-12-30
    相关资源
    最近更新 更多