Multer 文件上传程序在 Node.js 中无法工作
我正在尝试使用 mutler 上传多部分表单数据,但我的 req.body 始终未定义,req.file.[fieldname] 也始终未定义,并且 multer 也没有创建任何用于存储的文件夹,
这是我的 app.js
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const app = express();
app
.use(logger('dev'))
.use(express.json())
.use(express.urlencoded({ extended: false }))
.use(cors())
.use(express.static(path.join(__dirname, './public')))
.use('/api', require('./routes'))
module.exports = app;
我的路由文件
const router = require('express').Router();
const companyController = require('../controllers/company.controller');
const { companyFileUpload } = require('../utils/companyFileUpload.utils');
router.post(
'/register',
companyFileUpload.fields([
{ name: 'profilePic', maxCount: 1 },
{ name: 'my-files', maxCount: 10 }
]),
companyController.registerComapny
);
module.exports = router;
Multer middlware
const multer = require('multer');
const path = require('path');
const storage = multer.diskStorage({
destination: (req, file, cb) => {
if (file.fieldname === 'certificate') {
// if uploading resume
cb(null, 'uploads/user/company/certificates/');
} else if (file.fieldname === 'profilePic') {
// else uploading image
cb(null, 'uploads/user/company/profilePics/');
}
},
filename: (req, file, cb) => {
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
const filefilter = (req, file, cb) => {
if (file.fieldname === 'certificate') {
// if uploading certificate
if (
file.mimetype === 'application/pdf' ||
file.mimetype === 'application/msword' ||
file.mimetype === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
) {
// check file type to be pdf, doc, or docx
cb(null, true);
} else {
cb(null, false); // else fails
}
} else if (file.fieldname === 'profilePic') {
// else uploading profile pic
if (
file.mimetype === 'image/png' ||
file.mimetype === 'image/jpg' ||
file.mimetype === 'image/jpeg'
) {
// check file type to be png, jpeg, or jpg
cb(null, true);
} else {
cb(null, false); // else fails
}
}
};
const companyFileUpload = multer({
storage: storage,
fileFilter: filefilter
});
module.exports = { companyFileUpload };
和我的控制器
const User = require('../models/User');
const Company = require('../models/Company');
module.exports.registerComapny = async (req, res) => {
try {
console.log(req.files['profilePic']);
console.log(req.body); //undefined although I ma sending data
res.status(200).json({
status: 200,
data: 'Your Account has been created. Please wait for the verification by Admin'
});
} catch (e) {
console.log('ERROR:', e);
return res.status(400).json({ status: 400, data: e.message });
}
};
我的服务器正在运行 我正在使用邮递员提交表单数据,但我的图像没有被保存,文件夹也没有创建
I am trying to upload multi part form data using mutler but my req.body is always undefined and req.file.[fieldname] is also always undefined and multer is also not creating any folder for storage
here is my app.js
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const app = express();
app
.use(logger('dev'))
.use(express.json())
.use(express.urlencoded({ extended: false }))
.use(cors())
.use(express.static(path.join(__dirname, './public')))
.use('/api', require('./routes'))
module.exports = app;
my route file
const router = require('express').Router();
const companyController = require('../controllers/company.controller');
const { companyFileUpload } = require('../utils/companyFileUpload.utils');
router.post(
'/register',
companyFileUpload.fields([
{ name: 'profilePic', maxCount: 1 },
{ name: 'my-files', maxCount: 10 }
]),
companyController.registerComapny
);
module.exports = router;
Multer middlware
const multer = require('multer');
const path = require('path');
const storage = multer.diskStorage({
destination: (req, file, cb) => {
if (file.fieldname === 'certificate') {
// if uploading resume
cb(null, 'uploads/user/company/certificates/');
} else if (file.fieldname === 'profilePic') {
// else uploading image
cb(null, 'uploads/user/company/profilePics/');
}
},
filename: (req, file, cb) => {
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
const filefilter = (req, file, cb) => {
if (file.fieldname === 'certificate') {
// if uploading certificate
if (
file.mimetype === 'application/pdf' ||
file.mimetype === 'application/msword' ||
file.mimetype === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
) {
// check file type to be pdf, doc, or docx
cb(null, true);
} else {
cb(null, false); // else fails
}
} else if (file.fieldname === 'profilePic') {
// else uploading profile pic
if (
file.mimetype === 'image/png' ||
file.mimetype === 'image/jpg' ||
file.mimetype === 'image/jpeg'
) {
// check file type to be png, jpeg, or jpg
cb(null, true);
} else {
cb(null, false); // else fails
}
}
};
const companyFileUpload = multer({
storage: storage,
fileFilter: filefilter
});
module.exports = { companyFileUpload };
and my controller
const User = require('../models/User');
const Company = require('../models/Company');
module.exports.registerComapny = async (req, res) => {
try {
console.log(req.files['profilePic']);
console.log(req.body); //undefined although I ma sending data
res.status(200).json({
status: 200,
data: 'Your Account has been created. Please wait for the verification by Admin'
});
} catch (e) {
console.log('ERROR:', e);
return res.status(400).json({ status: 400, data: e.message });
}
};
My server is running I am using postman to submit form data but my images is not getting saved also folder is not creating
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论