使用新的限制fileSize值动态重新加载multer

时间:2016-10-01 00:37:48

标签: node.js express dynamic multer

我正在使用这些行来初始化multer:

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变量和新的multer设置?

可能是这样的......

router.get('/', function(req, res, next){
  global.upload = multer({ dest: 'upload/', limits: { fileSize: new_file_size_limit }}).array('fileUploaded');
});

现在,我能想到的是将fileSize的新设置保存在数据库中,然后编写一个.js文件,该文件将使用nodemon重新启动服务器(监视代码更改并重新启动,如果有的话) ...

这可以在不重启服务器的情况下完成吗?

1 个答案:

答案 0 :(得分:0)

好的,我发现了如何做到这一点。对于面临此问题的其他人,我在此处发布解决方案。 upload变量可以嵌套在路由的req,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');
      });
});