MEANJS:413(请求实体过大)

13

我正在使用MEANJS技术栈,使用ng-flow上传图像,并将imgsrc保存为base64 url。

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARkAAACzCAYAAAC94GgrA....

这是我的mongoose模式:

var ServiceSchema = new  mongoose.Schema({
    name : String,
    url: String,
    description : String,
    category : String,
    imgsrc: String
});

我上传大图片时遇到了请求实体过大的服务器错误。

虽然我可以在上传之前调整图片大小,但这仍然只允许我上传尺寸为200 x 200的图片。

$scope.resizeimageforupload = function(img){
        var canvas = document.getElementById('canvas');

        var MAX_WIDTH = 200; //400; too big still
        var MAX_HEIGHT = 200; //300 too big still
        var width = img.width;
        var height = img.height;

        if (width > height) {
          if (width > MAX_WIDTH) {
            height *= MAX_WIDTH / width;
            width = MAX_WIDTH;
          }
        } else {
          if (height > MAX_HEIGHT) {
            width *= MAX_HEIGHT / height;
            height = MAX_HEIGHT;
          }
        }
        canvas.width = width;
        canvas.height = height;
        var ctx = canvas.getContext("2d");
        ctx.drawImage(img, 0, 0, width, height);

        var dataURL = canvas.toDataURL("image/png");
        dataURL.replace(/^data:image\/(png|jpg);base64,/, "");

        return dataURL;
    };

有什么解决方法或替代方案吗?

请求实体过大:413

错误:请求实体过大
    at makeError (Angular\expresstest\node_modules\body-parser\node_modules\raw-body\index.js:184:15)
    at module.exports (Angular\expresstest\node_modules\body-parser\node_modules\raw-body\index.js:40:15)
    at read (Angular\expresstest\node_modules\body-parser\lib\read.js:62:3)
    at jsonParser (Angular\expresstest\node_modules\body-parser\lib\types\json.js:87:5)
    at Layer.handle [as handle_request] (Angular\expresstest\node_modules\express\lib\router\layer.js:76:5)
    at trim_prefix (Angular\expresstest\node_modules\express\lib\router\index.js:270:13)
    at Angular\expresstest\node_modules\express\lib\router\index.js:237:9
    at Function.proto.process_params (Angular\expresstest\node_modules\express\lib\router\index.js:312:12)
    at Angular\expresstest\node_modules\express\lib\router\index.js:228:12
    at Function.match_layer (Angular\expresstest\node_modules\express\lib\router\index.js:295:3)
3个回答

32

您可以将以下内容添加到Express配置中:

app.use(bodyParser.urlencoded({limit: '50mb'}));
app.use(bodyParser.json({limit: '50mb'}));

基本上,您需要配置 Express Web 服务器以接受更大的请求大小。将 50mb 替换为您想要接受的任何最大大小即可。

希望这可以帮助!!!


1
工作得很好!不确定这是用来做什么的:app.use(methodOverride({limit: '50mb'})); 但它是未定义的。 - Fabii
这对我不起作用。我已经添加了它,但我一直收到原始帖子中的错误。 - reaper_unique
似乎在客户使用 passport-local 登录后的某个时刻,会加载 raw-body,其限制大小为100 KB。 - reaper_unique
@reaper_unique 这正是我的情况。这里有什么解决方案? - lonelymo
很不幸,我还没有找到原因,但我有一个更大的问题。我忘记向我的主机询问他们是否支持node.js,结果他们不支持,而我的客户也不希望转移到更昂贵的支持node.js的解决方案,所以我必须尽快将我的项目迁移回.NET。 - reaper_unique
显示剩余3条评论

0

在2016年,可能已经发生了变化,我需要为bodyparser设置“type”以及“limit”,例如: var bodyParser = require('body-parser');

  var app = express();
  var jsonParser       = bodyParser.json({limit:1024*1024*20, type:'application/json'});
  var urlencodedParser = bodyParser.urlencoded({ extended:true,limit:1024*1024*20,type:'application/x-www-form-urlencoding' })

  app.use(jsonParser);
  app.use(urlencodedParser);

0

最近,我遇到了这个问题,我只需要在我的express应用程序中添加app.use(bodyParser.json({ limit: "50mb" }));这一行代码,就可以解决它了 :)

还有一件事,不要忘记在app.use(bodyParser.json())之前添加上面的代码行,否则它将不起作用。

无论您设置bodyparser的值如何,都必须在上面的代码行之前执行。

因为express将返回其默认值,您的更改将不会生效。希望这可能会有所帮助 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接