代码之家  ›  专栏  ›  技术社区  ›  Simeon Nakov

节点上的Multer。js抛出{错误:意外字段…}

  •  0
  • Simeon Nakov  · 技术社区  · 7 年前

    我正在使用Angular和ng2文件上传。 我收到一个错误:

    { Error: Unexpected field
    at makeError (C:\Users\cDotsp27598345\Desktop\Projects\ZeoliteGlobal\node_modules\multer\lib\make-error.js:12:13)
    at wrappedFileFilter (C:\Users\cDotsp27598345\Desktop\Projects\ZeoliteGlobal\node_modules\multer\index.js:40:19)
    at Busboy.<anonymous> (C:\Users\cDotsp27598345\Desktop\Projects\ZeoliteGlobal\node_modules\multer\lib\make-middleware.js:114:7)
    at Busboy.emit (events.js:159:13)
    at Busboy.emit (C:\Users\cDotsp27598345\Desktop\Projects\ZeoliteGlobal\node_modules\busboy\lib\main.js:38:33)
    at PartStream.<anonymous> (C:\Users\cDotsp27598345\Desktop\Projects\ZeoliteGlobal\node_modules\busboy\lib\types\multipart.js:213:13)
    at PartStream.emit (events.js:159:13)
    at HeaderParser.<anonymous> (C:\Users\cDotsp27598345\Desktop\Projects\ZeoliteGlobal\node_modules\dicer\lib\Dicer.js:51:16)
    at HeaderParser.emit (events.js:159:13)
    at HeaderParser._finish (C:\Users\cDotsp27598345\Desktop\Projects\ZeoliteGlobal\node_modules\dicer\lib\HeaderParser.js:68:8)
      code: 'LIMIT_UNEXPECTED_FILE',
      field: 'file',
      storageErrors: [] }
    

    这是我的组件的HTML:( addEvent 函数调用 uploadPicture 函数,详见下文。)

    <form #f="ngForm"(ngSubmit)="addEvent(f.value)">
        <input type="file" name="pic" ng2FileSelect [uploader]="uploader"/>
        <button type="submit">Submit</button>
    </form>
    

    我的角度分量:

      uploadPicture() {
        for (const item of this.uploader.queue) {
          if (!item.isUploaded) {
            item.upload();
          }
        }
      }
    

    和上传器:

      public uploader: FileUploader = new FileUploader({url: this.imgUpldURL, authToken: `Bearer ${localStorage.getItem('token')}`});
    

    以及我的API端点(我使用的是动态ID,如果我提供的路径没有动态ID,它仍然无法工作):

    const multer = require('multer');
    
    router.post('/uploadEventImage', authCheck, (req, res) => {
        const id = req.body.id;
        const upload = multer({dest: 
        `../src/assets/images/news/${id}/`}).single('pic');
        console.log('called')
        upload(req, res, function (err) {
            if (err) {
                console.log(err);
              return res.end(err.toString());
            }
            console.log('done');
            res.end('File is uploaded');
          });    
    });
    

    这是我在后端的所有multer配置。已成功接收请求。我在网上发现的大多数问题都是由于输入的名称属性与传入的名称属性不同所致 .single('name') 然而,正如你所看到的,这并没有解决任何问题。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Simeon Nakov    7 年前

    事实证明 ng2-file-upload 正在将所有字段的名称设置为 file .