首页 > 解决方案 > express body-parser 和 multer value 接收问题?

问题描述

我正在发出/product/create带有一些价值和图像的帖子请求。

如果我之前控制台每个值

upload(req, res, (err) => {})

它在没有图像信息的情况下正确显示。

如果我收到之后的价值upload(req, res, (err) => {})

没有显示任何价值。

完整的帖子请求代码:

  app.post('/product/create', (req, res) => {
      let filename;
      upload(req, res, (err) => {
        if(err){
          res.render('index', {
            msg: err
          });
        } else {
          if(req.file == undefined){
            res.render('index', {
              msg: 'Error: No File Selected!'
            });
          } else {
            res.render('index', {
              msg: 'File Uploaded!',
              filename = req.file.filename;
            });
          }
        }
      });

      const product = {
        title : req.body.title,
        desc  : req.body.desc,
        image  : filename,
      }
    });

配置 Multer:

const storage = multer.diskStorage({
  destination: './public/uploads/',
  filename: function(req, file, cb){
    cb(null,file.fieldname + '-' + Date.now() + path.extname(file.originalname));
  }
});


const upload = multer({
  storage: storage,
  limits:{fileSize: 1000000},
  fileFilter: function(req, file, cb){
    checkFileType(file, cb);
  }
}).single('myImage');


function checkFileType(file, cb){

  const filetypes = /jpeg|jpg|png|gif/;

  const extname = filetypes.test(path.extname(file.originalname).toLowerCase());

  const mimetype = filetypes.test(file.mimetype);

  if(mimetype && extname){
    return cb(null,true);
  } else {
    cb('Error: Images Only!');
  }
}

标签: node.jsexpressmulterbody-parser

解决方案


Multer 不支持上传功能之外的“req.file.filename”。由于文件名、原始名、字段名等是 multer 的内置 API。它仅限于上传功能。

现在,如果您尝试在数据库中上传产品值,那么您只需在 multer 上传函数中创建一个插入函数。


推荐阅读