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

Dynamically reload multer with new limits fileSize value

我正在使用这些行来初始化 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 中执行此操作。

是否可以在正在访问的给定路由上使用新的 multer 设置重新分配 upload 变量?

可能是这样的...

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

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

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

好的,我找到了如何做到这一点。对于面临此问题的其他人,我将在此处发布解决方案。 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');
      });
});