Динамически перезагружать мультер с новым значением размера файла limits

#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');
      });
});