MulterError: Unexpected field when i need to upload multiple file in nodejs

MulterError: Unexpected field when i need to upload multiple file in nodejs

我想在 nodejs 的一个请求中上传拖车文件,我使用 moulter 完成这项工作。

这是我在邮递员中的要求:

我在路由中使用 multer :

router.post(
  "/Create",
  UploadProfileHandler.single("signerProfile"),
  UploadPosterHandler.single("signerPoster"),
  SignerValidation.CreateHandle(),
  SignerController.CreateSigner
);

这是对多人的看法:

signer Profile Multer :

const multer = require("multer");
const fs = require("fs");
const mkdirp = require("mkdirp");
const path = require("path");

const GetDirectory = () => {
  let year = new Date().getFullYear();
  let month = new Date().getMonth();
  let day = new Date().getDay();
  return `src/public/uploads/signer/profile/${year}/${month}/${day}`;
};

const SignerStorage = multer.diskStorage({
  destination: (req, file, cb) => {
    console.log(file,req.body)
    let dir = GetDirectory();
    mkdirp(dir).then((made) => {
      cb(null, dir);
    });
  },
  filename: (req, file, cb) => {
    let fileName = GetDirectory() + "/" + file.originalname;
    cb(null, file.originalname);
  },
});

const UploadSigner = multer({
  storage: SignerStorage,
});

module.exports = UploadSigner;

这是singer Poster Multer :

    const multer = require("multer");
const fs = require("fs");
const mkdirp = require("mkdirp");
const path = require("path");

const GetDirectory = () => {
  let year = new Date().getFullYear();
  let month = new Date().getMonth();
  let day = new Date().getDay();
  return `src/public/uploads/signer/poster/${year}/${month}/${day}`;
};

const SignerStorage = multer.diskStorage({
  destination: (req, file, cb) => {
    let dir = GetDirectory();
    mkdirp(dir).then((made) => {
      cb(null, dir);
    });
  },
  filename: (req, file, cb) => {
    let fileName = GetDirectory() + "/" + file.originalname;
    cb(null, file.originalname);
  },
});

const UploadSigner = multer({
  storage: SignerStorage,
});

module.exports = UploadSigner;

但是当我想同时上传两个文件时,它显示了这个错误:

MulterError: Unexpected field at wrappedFileFilter (F:\Projects\Nodejs\SalesSignal\node_modules\multer\index.js:40:19) at Busboy. (F:\Projects\Nodejs\SalesSignal\node_modules\multer\lib\make-middleware.js:114:7) at Busboy.emit (events.js:315:20) at Busboy.emit (F:\Projects\Nodejs\SalesSignal\node_modules\busboy\lib\main.js:38:33) at PartStream. (F:\Projects\Nodejs\SalesSignal\node_modules\busboy\lib\types\multipart.js:213:13) at PartStream.emit (events.js:315:20) at HeaderParser. (F:\Projects\Nodejs\SalesSignal\node_modules\dicer\lib\Dicer.js:51:16) at HeaderParser.emit (events.js:315:20) at SBMH.emit (events.js:315:20) at SBMH._sbmh_feed (F:\Projects\Nodejs\SalesSignal\node_modules\streamsearch\lib\sbmh.js:159:14) at SBMH.push (F:\Projects\Nodejs\SalesSignal\node_modules\streamsearch\lib\sbmh.js:56:14) at HeaderParser.push (F:\Projects\Nodejs\SalesSignal\node_modules\dicer\lib\HeaderParser.js:46:19) at Dicer._oninfo (F:\Projects\Nodejs\SalesSignal\node_modules\dicer\lib\Dicer.js:197:25) at SBMH. (F:\Projects\Nodejs\SalesSignal\node_modules\dicer\lib\Dicer.js:127:10)

有什么问题吗?我该如何解决这个问题???

要处理多个字段,您不能多次调用 .single() 中间件,而应该使用 .array().fields()。这是一个如何使用后者的示例:

app.post("/upload", upload.fields([
    {name: 'signerPoster'},
    {name: 'signerProfile'}
]), (req, res) => {
   // do something with req.files and req.body
});

上传的文件将填充在 req.files.signerPosterreq.files.signerProfile 下,req.body 将包含基于文本的字段。