MulterError: Неожиданное поле, когда мне нужно загрузить несколько файлов в nodejs - PullRequest
1 голос
/ 11 июля 2020

Я хочу загрузить файл буксировки в один запрос в 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. * 1041) *: 315: 20) в SBMH._sbmh_feed (F: \ Projects \ Nodejs \ SalesSignal \ node_modules \ streamsearch \ lib \ sbmh. js: 159: 14) в SBMH.pu sh (F: \ Projects \ Nodejs \ SalesSignal \ node_modules \ streamsearch \ lib \ sbmh. js: 56: 14) в HeaderParser.pu sh (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)

в чем проблема? как я могу решить эту проблему ???

1 Ответ

1 голос
/ 11 июля 2020

Для обработки нескольких полей нельзя вызывать ПО промежуточного слоя .single() несколько раз, вместо этого следует использовать .array() или .fields(). Вот пример использования последнего:

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

Загруженные файлы будут заполнены под req.files.signerPoster, а req.files.signerProfile и req.body будут содержать текстовые поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...