#node.js #express #dynamic #multer
#node.js #экспресс #динамический #мультер
Вопрос:
Я использую эти строки для инициализации мультера:
file_size_limit=1000000;
var multer = require('multer');
upload = multer({ dest: 'upload/', limits: { fileSize: global.file_size_limit }}).array('fileUploaded');
И в маршруте, который я использую, например:
router.post('/', global.upload, function(req, res, next) {
Чего я уже достиг с помощью busboy, так это того, что я могу создать раздел администратора и изменить ограничение на размер файла, которое ограничивает размер загружаемых файлов. Нет необходимости перезапускать сервер, поскольку var busboy = ...
функциональность находится внутри router.post('/', function(req, res, next){})
..
Я не могу сделать это в multer без перезапуска сервера.
Возможно ли переназначить upload
переменную с новыми настройками мультера для данного доступного маршрута?
Может быть что-то вроде этого…
router.get('/', function(req, res, next){
global.upload = multer({ dest: 'upload/', limits: { fileSize: new_file_size_limit }}).array('fileUploaded');
});
Прямо сейчас все, о чем я могу думать, это сохранить новую настройку fileSize
в базе данных, а затем записать файл .js, который перезапустит сервер с помощью nodemon (который отслеживает изменения кода и перезапускает, если таковые имеются)…
Можно ли это сделать без перезапуска сервера?
Ответ №1:
Хорошо, я нашел, как это сделать. Для других, сталкивающихся с этой проблемой, я публикую решение здесь. Переменная загрузки может быть вложена в запрос, res маршрута. (Необязательно, чтобы переменная загрузки была параметром в самом маршруте)
Код будет выглядеть следующим образом:
router.post('/', function(req, res, next) {
var upload = multer({ dest: 'upload/', limits: { fileSize: req.app.locals.size }}).array('myfile');
upload(req, res,function(err) {
if(err) {
return res.end(err.toString());
}
console.log(req.body);
var tmp_path = req.files[0].path;
var target_path = '/home/' req.files[0].originalname;
fs.rename(tmp_path, target_path, function(err) {
if (err) throw err;
});
res.redirect('back');
});
});