如何在通过 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.
})
这是我上传多个文件的多重代码。
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.
})