使用新的限制 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');
});
});
我正在使用这些行来初始化 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');
});
});