MEANJS:将base64图像发送到服务器的最佳方法

6

情况

我正在使用MEAN.JS框架(MongoDBExpressJSAngularJSNodeJS)。

在前端使用AngularJS;我有一个包含base64编码的图像JSON字段。

我想要什么?

  • 我想将此JSON发送到服务器(NodeJS)。

我正在使用RESTful

控制器

var article = new Articles ($scope.article);


article.$save(function(response) {
    //If all is OK
}, function(errorResponse) {
    //Error 
 });
$scope.article有一个名为"image"的字段($scope.article.image),其中包含图像的base64字符串。 服务:
(function() {
'use strict';

angular
    .module('articles')
    .factory('articles', ['$resource',

    function($resource) {
        return $resource('articles/:articleId', { articleId: '@_id'
        }, {
            update: {
                method: 'PUT'
            }
        });
    }
]);})();

问题

如果JSON中没有任何字段包含Base64图像,则正常工作...

但是...

如果我们在一个字段中添加了图像的Base64字符串,服务器响应将出现此错误

    Error: request entity too large at makeError (/Users/aralroca/Documents/Aral/Projecte/node_modules/body-parser/node_modules/raw-body/index.js:184:15)
at module.exports (/Users/aralroca/Documents/Aral/Projecte/node_modules/body-parser/node_modules/raw-body/index.js:40:15)
at read (/Users/aralroca/Documents/Aral/Projecte/node_modules/body-parser/lib/read.js:62:3)
at jsonParser (/Users/aralroca/Documents/Aral/Projecte/node_modules/body-parser/lib/types/json.js:96:5)
at Layer.handle [as handle_request] (/Users/aralroca/Documents/Aral/Projecte/node_modules/express/lib/router/layer.js:82:5)
at trim_prefix (/Users/aralroca/Documents/Aral/Projecte/node_modules/express/lib/router/index.js:269:13)
at /Users/aralroca/Documents/Aral/Projecte/node_modules/express/lib/router/index.js:236:9
at Function.proto.process_params (/Users/aralroca/Documents/Aral/Projecte/node_modules/express/lib/router/index.js:311:12)
at /Users/aralroca/Documents/Aral/Projecte/node_modules/express/lib/router/index.js:227:12
at Function.match_layer (/Users/aralroca/Documents/Aral/Projecte/node_modules/express/lib/router/index.js:294:3)

提示请求实体过大... 图像大小为84Kb!!!!!

(我尝试使用$http资源,但结果相同...)

  • 如何解决此服务器错误?
  • 从Angular发送Base64编码图像到Node的最佳方法是什么?
  • 有什么建议吗?

相关答案:

我尝试了这个但不起作用,也不理解:

 app.use(bodyParser.urlencoded({limit: '50mb'}));
 app.use(bodyParser.json({limit: '50mb'}));
已过时,Base64图像的大小为84kb!!!

谢谢!


应用程序是否在代理后面?如果是,请检查代理配置。 - jmingov
尝试使用这个私有npm模块 - sam100rav
我还通过POST请求发送了一个Base64图像,也遇到了一些大小的问题。在我的Express配置中,我有:app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));app.use(bodyParser.json({limit: '50mb'})); 它们都可以正常工作。 - pgrodrigues
现在这个解决方案不起作用了,因为bodyParser已经被弃用了...另一种方式是,我不明白为什么会发生这种情况...默认情况下限制是1MB,但base64图像的大小只有84kb...也许有一个类似于bodyParser.urlencoded和bodyParser.json的未被弃用的代码?谢谢! - Aral Roca
@sam100rav 我尝试使用base64-image npm模块,但出现了相同的问题!!错误:请求实体太大... - Aral Roca
显示剩余2条评论
1个回答

0

尝试使用:

var express = require('express');
var app = express();
var busboy = require('connect-busboy');

app.post("/url_path",
busboy({
    limits: {
        fileSize: 10 * 1024 * 1024
    }
}),
function(req, res, next) {
    // check that the request's body was as expected
    if (!req.busboy) return next('route'); // or next(new Error('...'));

    // ...
});

// ...

若需了解更多信息,请访问这个私有npm


我现在尝试了这个解决方案,但是它不起作用,问题仍然存在... 错误:请求实体太大... - Aral Roca

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