如何在通过 multer 上传文件之前自动创建文件夹,以便这些文件存储在 nodejs 中创建的文件夹中?

How to create folder automatically before files upload via multer so that those files get stored in that created folder in nodejs?

这是我上传多个文件的多重代码。

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './public/files/'+ req.user.id)
  },
  filename: function (req, file, cb) {
    x = file.originalname; //+path.extname(file.originalname);
  cb(null,x);
  }
});

var upload = multer({storage: storage});

这是 post 请求,文件在点击提交时提交。

router.post(upload.array("FileUpload",12), function(req, res, next) {

//Here accessing the body datas.

})

所以我想要的是,我想先用生成的 ID 的名称创建一个 folder,可以从 req.body 访问它,然后上传这些文件分别进入该文件夹。 但是由于我无法在上传之前首先访问 body 我无法创建相应的 folder directory. 有没有其他方法可以让我想到并实现它?

更新了使用 fs-extra 包的解决方案。

const multer = require('multer');
let fs = require('fs-extra');

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    let Id = req.body.id;
    fs.mkdirsSync('./public/files/'+ req.user.id + '/' + Id);
    cb(null, './public/files/'+ req.user.id + '/' + Id)
  },
  filename: function (req, file, cb) {
    x = file.originalname; //+path.extname(file.originalname);
  cb(null,x);
  }
});

var upload = multer({storage: storage});

这是 post 请求,文件在点击提交时提交。

router.post(upload.array("FileUpload",12), function(req, res, next) {

//Here accessing the body datas.

})

您必须先安装 fs-extra,它将创建文件夹

为多个 multerHelper.js

创建单独的文件夹
const multer = require('multer');
let fs = require('fs-extra');

let storage = multer.diskStorage({
destination: function (req, file, cb) {
    let Id = req.body.id;
    let path = `tmp/daily_gasoline_report/${Id}`;
    fs.mkdirsSync(path);
    cb(null, path);
},
filename: function (req, file, cb) {
    // console.log(file);

    let extArray = file.mimetype.split("/");
    let extension = extArray[extArray.length - 1];
    cb(null, file.fieldname + '-' + Date.now() + "." + extension);
 }
})

let upload = multer({ storage: storage });

let createUserImage = upload.array('images', 100);

let multerHelper = {
    createUserImage,
}

module.exports = multerHelper;

在你的路线中导入 multerhelper 文件

const multerHelper = require("../helpers/multer_helper");

router.post(multerHelper , function(req, res, next) {

//Here accessing the body datas.

})