Multer 文件上传程序在 Node.js 中无法工作

发布于 2025-01-11 09:33:43 字数 3064 浏览 3 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文