Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在通过multer上传文件之前自动创建文件夹,以便这些文件存储在nodejs中创建的文件夹中?_Node.js_File Upload_Multer_Create Directory - Fatal编程技术网

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

Node.js 如何在通过multer上传文件之前自动创建文件夹,以便这些文件存储在nodejs中创建的文件夹中?,node.js,file-upload,multer,create-directory,Node.js,File Upload,Multer,Create Directory,这是我上传多个文件的multer代码 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);

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

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请求,单击submit可提交文件

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

//Here accessing the body datas.

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

//Here accessing the body datas.

})
因此,我想要的是,我想要创建一个
文件夹
,首先使用生成的
ID
名称,可以从
req.body
访问该文件夹,然后分别将这些文件上载到该文件夹中。 但是,由于我无法在上传之前首先访问
正文
,因此我无法创建相应的
文件夹目录。
是否有其他方法可以考虑并实现此功能

使用fs额外包更新了解决方案

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请求,单击submit可提交文件

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

//Here accessing the body datas.

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

//Here accessing the body datas.

})

您必须首先安装将创建文件夹的
fs extra

为multer-like
multerHelper.js创建seprate文件夹

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.

})

哪里可以找到帮助者/multer\u帮助者?您必须在项目中创建它。我已经根据您的答案更新了解决方案。对吗?请在我的问题中添加“使用fs extra package更新解决方案”后进行检查。我已经为routes创建了SeCreate文件夹,因此此方法适用于meDidn,但尚未测试。我会做的,并让你知道它是否有效。然后我也会投票表决你的答案,当然,谢谢!:)