NodeJS用Multer上传图片,得到“错误:意外字段”

时间:2016-05-08 12:41:17

标签: javascript angularjs node.js express multer

当尝试通过NgFileUpload处理和存储一些上传的图像时,我收到“错误:意外的字段”。这是我的Angular代码:

HTML:

<div ngf-drop="upload($files)" ngf-select="upload($files)" ng-model="files" 
  ngf-drag-over-class="'dragover'" ngf-multiple="true" ngf-pattern="'image/*'" 
  ngf-accept="'image/*'" ngf-max-size="2MB" ngf-min-height="100" 
  ngf-resize="{width: 100, height: 100}" ngf-keep="'distinct'" 
  name="artistUpload" class="drop-box">

  Drop images here or click to upload
</div>

AngularJS:

  $scope.$watch('files', function () {
      $scope.upload($scope.files);
  });

  $scope.upload = function (files) {
    if (files && files.length) {
        console.log(files);
        Upload.upload({
            url: '/api/photos/upload/',
            arrayKey: '',
            data: {
                files: files
            }
        }).then(function (response) {
            $timeout(function () {
                $scope.result = response.data;
            });
        }, function (response) {
            if (response.status > 0) {
                $scope.errorMsg = response.status + ': ' + response.data;
            }
        }, function (evt) {
            $scope.progress =
                Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
        });
    }
};

快递:

var multer  = require('multer')

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    console.log(req);
    cb(null, '/private/img/')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname)
  }
})

var upload = multer({ storage: storage })

app.post('/api/photos/upload/', upload.array('photos', 6), function (req, res, next) {
    console.log("Files saved");
    console.log(req.files);
    next();
})

This question表明arrayKey: ''可以解决问题,但这对我来说根本不起作用。这是Multer的一个非常无用的错误!知道我在这里做错了吗?

编辑:这是Node发出的错误:

Error: Unexpected field
    at makeError (root/node_modules/multer/lib/make-error.js:12:13)
    at wrappedFileFilter (root/node_modules/multer/index.js:39:19)
    at Busboy.<anonymous> (root/node_modules/multer/lib/make-middleware.js:112:7)
    at emitMany (events.js:108:13)
    at Busboy.emit (events.js:182:7)
    at Busboy.emit (root/node_modules/busboy/lib/main.js:31:35)
    at PartStream.<anonymous> (root/node_modules/busboy/lib/types/multipart.js:213:13)
    at emitOne (events.js:77:13)
    at PartStream.emit (events.js:169:7)
    at HeaderParser.<anonymous> (root/node_modules/dicer/lib/Dicer.js:51:16)
    at emitOne (events.js:77:13)
    at HeaderParser.emit (events.js:169:7)
    at HeaderParser._finish (root/node_modules/dicer/lib/HeaderParser.js:68:8)
    at SBMH.<anonymous> (root/node_modules/dicer/lib/HeaderParser.js:40:12)
    at emitMany (events.js:108:13)
    at SBMH.emit (events.js:182:7)
    at SBMH._sbmh_feed (root/node_modules/streamsearch/lib/sbmh.js:159:14)
    at SBMH.push (root/node_modules/streamsearch/lib/sbmh.js:56:14)
    at HeaderParser.push (root/node_modules/dicer/lib/HeaderParser.js:46:19)
    at Dicer._oninfo (root/node_modules/dicer/lib/Dicer.js:197:25)
    at SBMH.<anonymous> (root/node_modules/dicer/lib/Dicer.js:127:10)
    at emitMany (events.js:108:13)

1 个答案:

答案 0 :(得分:0)

上传名称和<img>中的字段名称不同。您需要将它们都匹配。 在服务器端,两个值保持相同upload.array('artistUpload')