我自己解决了!
这不是我的完美解决方案(它适用于目标、文件名和文件类型,但不适用于 maxsize 和文件)但是,我想分享我的代码:
在 app.js 我创建一个像这样的对象:
var obj={
目的地:{输入名称1:'./uploads',输入名称:'./uplds'},
文件名:{ 输入名称 1:'file1',输入名称 2:'file2'},
字段名称大小:未定义,
字段大小:未定义,
字段:未定义,
文件大小:{输入名称1:2*1024*1024,输入名称2:10*1024*1024},
文件:{输入名称1:3,输入名称2:1},
部分:未定义,
文件类型:{input-name1:"jpeg,jpg"}
};
在 rules_upload.js 中:
var path = require('path');
var multer = require('multer');
var defaultMaxSize=3*1024*1024;
var defaultFiles=1;
exports.upload = function (obj, next) {
var upld = {};
变量存储={};
变量限制 = {};
for (obj 中的键)
{
开关(键){
案例“目的地”:
storage.destination=函数(请求,文件,cb){
cb(null,obj.destination[file.fieldname]);
};
休息;
案例“文件名”:
storage.filename=函数(请求,文件,cb){
if(obj.filename[file.fieldname]!=undefined)
{
名称=obj.filename[file.fieldname];
如果(名称==未定义)
名称=file.originalname.substring(0, file.originalname.lastIndexOf("."));
nome+=file.originalname.substring(file.originalname.lastIndexOf('.'),file.originalname.length);
}
else name=file.originalname.split('/').pop().trim();
cb(null, nome);
};
break;
案例“字段名称大小”:
limits.fieldNameSize = 函数(请求、文件、cb){
if(obj.fieldNameSize[file.fieldname]!=undefined)
cb(null,obj.fieldNameSize[file.fieldname]);
否则返回 cb(null, true);
};
休息;
案例“字段大小”:
limits.fieldSize=函数(请求、文件、cb){
if(obj.fieldSize[file.fieldname]!=undefined)
cb(null,obj.fieldSize[file.fieldname]);
否则返回 cb(null, true);
};
休息;
案例“字段”:
limits.fields = 函数(请求、文件、cb){
如果(obj.fields [file.fieldname]!=未定义)
cb(null,obj.fields[file.fieldname]);
否则返回 cb(null, true);
};
休息;
案例“文件大小”:
limits.fileSize = 函数(请求、文件、cb){
if(obj.fileSize[file.fieldname]!=undefined)
cb(null,obj.fileSize[file.fieldname]);
否则返回 cb(null, true);
};
休息;
案例“文件”:
limits.files = 函数(请求、文件、cb){
if(obj.files[file.fieldname]!=undefined)
cb(null,obj.files[file.fieldname]);
否则返回 cb(null, true);
};
休息;
案例“部分”:
limits.parts = 函数(请求、文件、cb){
if(obj.parts[file.fieldname]!=undefined)
cb(null,obj.parts[file.fieldname]);
否则返回 cb(null, true);
};
休息;
案例“文件类型”:
upld.fileFilter=函数(请求,文件,cb){
if(obj.filetypes[file.fieldname]!=undefined){
var f=obj.filetypes[file.fieldname];
f=f.replace(",","|");
var re=新的正则表达式(f);
var mimetype = re.test(file.mimetype);
var extname = re.test(path.extname(file.originalname).toLowerCase());
if (mimetype && extname) {return cb(null, true); }
cb("Sono Accettate solo le seguenti estensioni:" + obj.filetypes[file.fieldname]);
}
否则返回 cb(null, true);
};
休息;
}
}
如果(存储.文件名==未定义)
storage.filename=函数(请求,文件,cb){
名称=file.originalname.split('/').pop().trim();
cb(null, Date.now()+"_"+nome);
};
如果(limits.fileSize==未定义)
限制.fileSize=defaultMaxSize;
/*
var maxSize=l.maxSize;
限制文件大小=函数(请求,文件,cb){
if(file.size>(maxSize)) { cb(null,true); }
else { cb("Il file non può pesare più di"+maxSize+" MB" ); }
};
*/
upld.storage=multer.diskStorage(存储);
upld.limits=限制;
返回 multer(upld).any();
};