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.signerPoster
和 req.files.signerProfile
下,req.body
将包含基于文本的字段。
我想在 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.signerPoster
和 req.files.signerProfile
下,req.body
将包含基于文本的字段。