文件和文本不能同时在人体分析仪和研磨器上上传?

时间:2018-10-09 16:21:04

标签: express multer body-parser

我有一个from可以一次上传文本和图片。我正在使用multer和body-parser。但是当我将enctype="multipart/form-data"设置为req.body时并没有任何价值。

<form method="post" action="/admin/dashbord/product" enctype="multipart/formdata">

<div class="form-group">
     <label for="source">Title</label>
       <input type="text" name="title" class="form-control" id="source" value="{{product.title}}" placeholder="Enter Title">
 </div>


 <div class="form-group">
    <label for="source">Image</label>
     <input type="file" name="image" class="form-control" id="source" placeholder="Enter Title">
 </div>

 <button type="submit" class="btn btn-primary">Submit</button>
 </form>

路由器:

 router.post('/product', function (req, res) {
       var filename;
       upload(req, res, (err) => {
         filename = req.file.filename

    })

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

       console.log(product)
    })

马尔特上传代码:

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('image');

  // Check File Type
  function checkFileType(file, cb){
    // Allowed ext
    const filetypes = /jpeg|jpg|png|gif/;
    // Check ext
    const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
    // Check mime
    const mimetype = filetypes.test(file.mimetype);

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

如果我没有enctype身体分析器的工作正常,否则变得不确定。

如果我将imagename插入upload函数中,并且在未定义之前可以正常运行。

1 个答案:

答案 0 :(得分:1)

在上传功能中全部写下来:

 upload(req, res, (err) => {
      filename = req.file.filename;
      const product = {
        title: req.body.title,
        image: filename,
      };

       console.log(product)
})

这很简单,您错过了它。