使用angular上传后使用节点存储图像

时间:2014-06-04 09:51:12

标签: javascript node.js angularjs http

我正在使用平均堆栈创建一个Web应用程序,任何用户都可以上传图像,它将存储在mongo db或服务器系统的文件夹中。 我使用angular-file-upload上传图片。问题出现在nodejs部分,当我尝试打印req.body时,它显示一个空对象。

HTMl代码:<input type="file" ng-file-select="onFileSelect($files)" >

角度代码:

$scope.onFileSelect = function($files) {
        for (var i = 0; i < $files.length; i++) {
          var file = $files[i];
          console.log(file);
          $scope.upload = $upload.upload({
            url: '/imagePost/'+Global.user._id, 
             method: 'POST' ,

            data: {myObj: 'image'},
            file: file, 
          }).progress(function(evt) {
            console.log('percent: ' + parseInt(100.0 * evt.loaded / evt.total));
          }).success(function(data, status, headers, config) {
            console.log('success');
          });
          }

      };

节点代码:

app.post('/imagePost/:userid',function(req,res){

 console.log('I came here');
 console.log(req.body);
 res.send('');
});

这里我只是尝试打印请求体,但我得到一个空对象。我包括了所有依赖项。 如果这不起作用,我觉得正在读取图像并在请求中发送它并在节点代码中创建一个新图像,稍后可以将其存储在文件夹中。 但为什么我没有在请求体中得到任何对象。请帮帮我..

1 个答案:

答案 0 :(得分:1)

我认为您使用的是Express v4.x

如果是,则在 req.body 中获得空对象,因为从Express 4开始,不推荐使用bodyParser并将其替换为body-parser。

了解从v3到v4的迁移 here

  • 体解析器

它只支持 urlencoded json multipart 不再受支持,如果你想使用multipart,你需要单独添加它

您需要 bodyParser 支持多部分,以便从客户端接收文件

您可以使用以下任何一项;

  1. busboy(推荐因为速度快)
  2. 多方
  3. mutler(busboy的包装,让你的生活更容易编码
  4. 强大