我可以使用 multer 和单个 html 表单在不同的文件夹中上传多个文件吗?

CanI upload many files in different folder using multer and a single html form?

我正在尝试开发一个应该从单个 html 表单上传文件的模块。 想象一个包含两个文件的表单:
1) 用户头像;
2) 简历相同的用户。
我会在 /avatar 中上传第一个文件,在 /cv 中上传第二个文件。

我可以用这三种方法来做:

.array('input file name');
.fields([{ name: 'avatar'},

{ 姓名:'curriculum'}]); .任何()

第一个接受很多文件,但它必须具有相同的字段名称;
第二个接受很多文件,它可以传递名称(我认为这对我来说应该是正确的道路);
第三个接受我在 html 表单上设置的所有文件的所有名称。 好吧,它很好用,但问题是我不知道如何为每个文件设置不同的文件夹!

最后一次试用是:

app.route('/upload').post(.upload(fileObj1).array('avatar'),upload(fileObj2).array('curriculum'),function (request, response, next) {

但是 returns:

Error: Unexpected field

The problem isn't in other parts of code because if I launch this code: app.route('/upload').post(.upload(fileObj1).array('avatar'),function (request, response, next) {

传递单个文件它工作正常! 有人可以帮助我吗?

我自己解决了! 这是我不完美的解决方案(它适用于目标、文件名和文件类型,但不适用于最大大小和文件)但是,我想分享我的代码:

在 app.js 我创建了一个这样的对象:

变量对象={ 目的地:{input-name1:'./uploads', input-name:'./uplds'}, 文件名:{ input-name1:'file1', input-name2:'file2'}, FieldNameSize:undefined, fieldSize:undefined, fields:undefined, 文件大小:{输入名称1:2*1024*1024,输入名称2:10*1024*1024}, 文件:{input-name1:3,input-name2:1}, parts:undefined, 文件类型:{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 = {}; 变量存储={}; var 限制 = {}; for(输入obj) { 开关(键){ 案例'destination': storage.destination=函数(请求,文件,cb){ cb(null,obj.destination[file.fieldname]); }; 休息; 案例'filename': storage.filename=函数(请求,文件,cb){ 如果(obj.filename[file.fieldname]!=未定义) { 名称=obj.filename[file.fieldname]; 如果(名字==未定义) 名称=file.originalname.substring(0, file.originalname.lastIndexOf("."));

                nome+=file.originalname.substring(file.originalname.lastIndexOf('.'),file.originalname.length);

} else nome=file.originalname.split('/').pop().trim();

cb(null, nome);
        };
        break; 

案例'FieldNameSize': limits.fieldNameSize = 函数(请求、文件、cb){ 如果(obj.fieldNameSize[file.fieldname]!=未定义) cb(null,obj.fieldNameSize[file.fieldname]); 否则 return cb(null, true); }; 休息; 案例'fieldSize': limits.fieldSize=函数(请求,文件,cb){ 如果(obj.fieldSize[file.fieldname]!=未定义) cb(null,obj.fieldSize[file.fieldname]); 否则 return cb(null, true); }; 休息; 案例'fields': limits.fields = 函数(请求、文件、cb){ 如果(obj.fields[file.fieldname]!=未定义) cb(null,obj.fields[file.fieldname]); 否则 return cb(null, true); }; 休息; 案例'fileSize': limits.fileSize = 函数(请求、文件、cb){ 如果(obj.fileSize[file.fieldname]!=未定义) cb(null,obj.fileSize[file.fieldname]); 否则 return cb(null, true); }; 休息; 案例'files': limits.files = 函数(请求、文件、cb){ 如果(obj.files[file.fieldname]!=未定义) cb(null,obj.files[file.fieldname]); 否则 return cb(null, true); }; 休息; 案例'parts': limits.parts = 函数(请求、文件、cb){ 如果(obj.parts[file.fieldname]!=未定义) cb(null,obj.parts[file.fieldname]); 否则 return cb(null, true); }; 休息; 案例'filetypes': upld.fileFilter=函数(请求,文件,cb){ 如果(obj.filetypes[file.fieldname]!=未定义){ var f=obj.filetypes[file.fieldname]; f=f.replace(",","|"); var re= new RegExp(f); var mimetype = re.test(file.mimetype); var extname = re.test(path.extname(file.originalname).toLowerCase()); 如果 (mimetype && extname ) {return cb(null, true); } cb("Sono Accettate solo le seguenti estensioni: " + obj.filetypes[file.fieldname]); } 否则 return cb(null, true); }; 休息; } } 如果(storage.filename==未定义) storage.filename=函数(请求,文件,cb){ nome=file.originalname.split('/').pop().trim(); cb(null, Date.now()+"_"+nome); }; 如果(limits.fileSize==未定义) limits.fileSize=默认最大尺寸; /* var maxSize=l.maxSize; limitsfileSize=函数(请求,文件,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=限制;

return multer(upld).any();

};