2016-10-01 28 views
1

我使用這些線路來初始化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(監視代碼更改並重新啓動,如果有的話)...

這可以在不重新啓動服務器的情況下完成嗎?

回答

0

好吧,我發現如何做到這一點。對於面臨這個問題的其他人,我在這裏發佈解決方案。上傳變量可以嵌套在路由的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'); 
     }); 
});