使用文件类型输入发布$ http请求,并且不使用multer nodejs获取req.body和req.file

时间:2018-12-21 06:42:41

标签: javascript node.js json file http

我尝试过的代码是:

//jade
 input(type='file', ng-model='filename',file-model='Image', required='')

 // controller.js
 $scope.reupload = () => {
      $scope.user = {
        UserName: 'sam',
        FirstName: 'sameer',
      };
      const fd = new FormData();
      $scope.theData = {};
      fd.append('file', $scope.Image);
      $scope.theData.i = fd;
      $http({
        method: 'POST',
        url: '/api/uploadresume',
        data: $scope.theData,
      })
        .then((data) => {
          console.log(data);
        }).catch((err) => {
          console.log(`error ${err}`);
        });
    };

//server.js
app.post('/api/uploadresume', api.UploadAlumniResume);

//api.js
exports.UploadAlumniResume = (req, res) => {
  console.log('req.body', req.body);
  console.log('req.file', req.file);
};

我正在获取文件数据inito $ scope.Image

并且我使用const fd = new FormData()附加数据。

fd附加 $ scope.Image

然后将 $ scope.theData 数据存储到发布请求中。

我得到的结果是:

// req.body $ req.file控制台

 req.body { i: {} }

 req.file undefined

我需要访问req.body数据并读取和fs写入req.file数据。

请给我任何解决方案!

2 个答案:

答案 0 :(得分:0)

您不能在要发布的对象中放入FormData。它必须是数据本身。

  const fd = new FormData();
  fd.append('file', $scope.Image);
  $http({
    method: 'POST',
    url: '/api/uploadresume',
    data: fd,
    processData: false
  })

答案 1 :(得分:0)

上传图片或文件时,需要传递标题'Content-Type': 'multipart/form-data'

如果您使用的是bodyparser,则主体解析器将无法处理form-data,而只能处理application/x-www-form-urlencodedapplication/json数据

在您获得req.file undefined时,这是因为bodyparser无法与表单数据一起使用

因此使用multer处理form-data