#node.js #file-upload #multer #create-directory
#node.js #загрузка файла #мультер #создать-каталог
Вопрос:
Это мой код 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, в котором файлы отправляются при нажатии кнопки отправки.
router.post(upload.array("FileUpload",12), function(req, res, next) {
//Here accessing the body datas.
})
Итак, чего я хочу, я хочу сначала создать folder
с именем ID
сгенерированного, к которому можно получить доступ из 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.
})
Ответ №1:
сначала вы должны установить fs-extra
тот, который создаст папку
создайте отдельную папку для multer, например 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.
})
Комментарии:
1. Где найти помощников / multer_helper?
2. вы должны создать его в папке вашего проекта
3. Я обновил решение в соответствии с вашим ответом. Это правильно? Пожалуйста, проверьте после добавления «Обновленного решения с использованием пакета fs-extra» в мой вопрос.
4. Я также создал отдельную папку для маршрутов, поэтому этот метод сработал для меня
5. Еще не тестировал. Сделает это и сообщит вам, работает ли это. И тогда я обязательно поддержу ваш ответ, спасибо! 🙂