【问题标题】:req.body not working when using multipart/form-data in html form NodeJs/Express在 html 表单 NodeJs/Express 中使用 multipart/form-data 时,req.body 不起作用
【发布时间】:2023-03-30 01:15:02
【问题描述】:

我使用body-parser 来获取表单请求的信息,但是当我将enctype="multipart/form-data" 放在表单的标题中时,req.body 根本不起作用。

但是,我使用multer lib 来上传图片,如下所示:

app.post("/", function (req, res, next) {
  var button = req.body.button_name;
  if (button == "upload") {
    var UserId = 2;
    var imageUploadedLimited = 3;
    var storage = multer.diskStorage({
      destination: function (req, file, callback) {
        var dir = "./public/images/uploads/";
        if (!fs.existsSync(dir)) {
          fs.mkdirSync(dir);
        }
        dir = "./public/images/uploads/" + UserId;
        if (!fs.existsSync(dir)) {
          fs.mkdirSync(dir);
        }
        callback(null, dir);
      },
      filename: function (req, file, cb) {
        cb(null, file.fieldname + "-" + Date.now() + ".jpg");
      },
    });
    const maxSize = 1 * 1000 * 1000;

    var upload = multer({
      storage: storage,
      limits: { fileSize: maxSize },
      fileFilter: function (req, file, cb) {
        var filetypes = /jpeg|jpg|png/;
        var mimetype = filetypes.test(file.mimetype);

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

        if (mimetype && extname) {
          return cb(null, true);
        }

        cb(
          "Error: File upload only supports the " +
            "following filetypes - " +
            filetypes
        );
      },
    }).array("filename2", imageUploadedLimited);

    upload(req, res, function (err) {
      if (err) {
        res.send(err);
      } else {
        res.send("Success, Image uploaded!");
      }
    });
  }
});

如果我从第二行打印出button 变量,将显示undefined 值。我知道body-parser 不支持enctype="multipart/form-data"。在这种情况下,我如何从表单中看到价值?

【问题讨论】:

标签: node.js express body-parser


【解决方案1】:

如果你使用multer,需要作为中间件传递

// Do Something like this
var multer  = require('multer')
var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'Your path here')
    },
    filename: function (req, file, cb) {
        cb(null, "fileName")
    }
})
var upload = multer({
    storage: storage,
})

app.post("/" ,upload.any(), function (req, res, next) {
    // NOW YOU CAN ACCESS REQ BODY HERE
});

【讨论】:

    猜你喜欢
    • 2015-05-13
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 2011-11-23
    相关资源
    最近更新 更多