我正在尝试开发一个模块,该模块应从单个html表单上载文件。想象一个包含两个文件的表单:
1)用户的头像;
2)简历相同的用户。
我会在/ avatar中上传第一个文件,在/ cv中上传第二个文件。
我可以使用这三种方法:
.array('input file name');
.fields([{ name: 'avatar'},
{name:'curriculum'}]); 。任何()
第一个可以接受许多文件,但是它必须具有相同的字段名称;
第二个文件接受许多文件,并且可以传递名称(我认为这对我来说应该是正确的道路);
第三个接受所有文件,它们都是我在html表单上设置的所有名称。好吧,它工作正常,但问题是我不知道如何为每个文件设置不同的文件夹!
上次审判是:
app.route('/upload').post(.upload(fileObj1).array('avatar'),upload(fileObj2).array('curriculum'),function (request, response, next) {
但它返回:
错误:意外字段
问题不在代码的其他部分,因为如果我启动以下代码:app.route('/ upload')。post(.upload(fileObj1).array('avatar'),function(请求,响应,下一个) {
传递单个文件,它可以正常工作!有人可以帮我吗?
我解决了自己!这不是我的完美解决方案(它适用于目标,文件名和文件类型,但不适用于maxsize和文件),但是,我想共享我的代码:
在app.js中,我创建了一个像这样的对象:
var obj = {目标:{input-name1:'./ uploads',input-name:'./ uplds'},文件名:{input-name1:'file1',input-name2:'file2'},FieldNameSize:未定义,fieldSize:未定义,field:未定义,fileSize:{输入名称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 =函数(obj,下一个){var upld = {}; var storage = {}; var limit = {}; for(obj中的键){switch(key){case'destination':storage.destination = function(request,file,cb){cb(null,obj.destination [file.fieldname]); }; 休息; 案例'filename':storage.filename = function(request,file,cb){if(obj.filename [file.fieldname]!= undefined){nome = obj.filename [file.fieldname]; if(nome == undefined)nome = 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 =函数(request,file,cb){if(obj.fieldNameSize [file.fieldname]!= undefined)cb(null,obj.fieldNameSize [file.fieldname]); 否则返回cb(null,true); }; 休息; 案例'fieldSize':limits.fieldSize =函数(request,file,cb){if(obj.fieldSize [file.fieldname]!= undefined)cb(null,obj.fieldSize [file.fieldname]); 否则返回cb(null,true); }; 休息; case'fields':limits.fields =函数(请求,文件,cb){if(obj.fields [file.fieldname]!= undefined)cb(null,obj.fields [file.fieldname]); 否则返回cb(null,true); }; 休息; 案例'fileSize':limits.fileSize =函数(request,file,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); }; 休息; 情况'parts':limits.parts =函数(请求,文件,cb){if(obj.parts [file.fieldname]!= undefined)cb(null,obj.parts [file.fieldname]); 否则返回cb(null,true); }; 休息; case'filetypes':upld.fileFilter = function(req,file,cb){if(obj.filetypes [file.fieldname]!= undefined){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()); if(mimetype && extname){返回cb(null,true); } cb(“ Sono Accettate solo le seguenti estensioni:” + obj.filetypes [file.fieldname]); } else return cb(null,true); }; 休息; }} if(存储。filename == undefined)storage.filename =函数(请求,文件,cb){nome = file.originalname.split('/')。pop()。trim(); cb(null,Date.now()+“ _” + nome); }; if(limits.fileSize == undefined)极限.fileSize = defaultMaxSize; / * var maxSize = l.maxSize; limitsfileSize =函数(请求,文件,cb){if(file.size>(maxSize)){cb(null,true); } else {cb(“ Il file nonpuòpesarepiùdi” + maxSize +“ MB”); }; * / upld.storage = multer.diskStorage(存储); upld.limits =限制;
返回multer(upld).any();
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句