【问题标题】:MulterError: Unexpected field when i need to upload multiple file in nodejsMulterError:当我需要在nodejs中上传多个文件时出现意外字段
【发布时间】:2023-03-25 10:54:01
【问题描述】:

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

这是我对邮递员的要求:

我在路由中使用 multer:

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

这不是 multer :

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:意外字段 在 WrappedFileFilter (F:\Projects\Nodejs\SalesSignal\node_modules\multer\index.js:40:19) 在 Busboy。 (F:\Projects\Nodejs\SalesSignal\node_modules\multer\lib\make-middleware.js:114:7) 在 Busboy.emit (events.js:315:20) 在 Busboy.emit (F:\Projects\Nodejs\SalesSignal\node_modules\busboy\lib\main.js:38:33) 在 PartStream。 (F:\Projects\Nodejs\SalesSignal\node_modules\busboy\lib\types\multipart.js:213:13) 在 PartStream.emit (events.js:315:20) 在 HeaderParser。 (F:\Projects\Nodejs\SalesSignal\node_modules\dicer\lib\Dicer.js:51:16) 在 HeaderParser.emit (events.js:315:20) 在 SBMH.emit (events.js:315:20) 在 SBMH._sbmh_feed (F:\Projects\Nodejs\SalesSignal\node_modules\streamsearch\lib\sbmh.js:159:14) 在 SBMH.push (F:\Projects\Nodejs\SalesSignal\node_modules\streamsearch\lib\sbmh.js:56:14) 在 HeaderParser.push (F:\Projects\Nodejs\SalesSignal\node_modules\dicer\lib\HeaderParser.js:46:19) 在 Dicer._oninfo (F:\Projects\Nodejs\SalesSignal\node_modules\dicer\lib\Dicer.js:197:25) 在 SBMH。 (F:\Projects\Nodejs\SalesSignal\node_modules\dicer\lib\Dicer.js:127:10)

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

【问题讨论】:

    标签: javascript node.js multer


    【解决方案1】:

    要处理多个字段,您不能多次调用.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 将包含基于文本的字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-20
      • 2019-07-12
      • 2021-05-06
      • 2021-08-15
      • 1970-01-01
      • 2019-01-30
      • 2022-06-10
      • 2023-03-23
      相关资源
      最近更新 更多