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

时间:2016-09-27 14:06:18

标签: node.js file-upload multer

我正在尝试开发一个应该从单个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(fileObj1).array( '阿凡达'),函数   (请求,响应,下一个){

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

1 个答案:

答案 0 :(得分:-1)

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

在app.js中的

我创建了一个这样的对象:

var obj = { destination:{input-name1:'。/ uploads',input-name:'。/ uplds'}, filename:{input-name1:'file1',input-name2:'file2'}, FieldNameSize:未定义, 字段大小:未定义, 田:未定义, fileSize:{input-name1:2 * 1024 * 1024,input-name2:10 * 1024 * 1024}, 文件:{输入名1:3,输入NAME2:1}, 部分:不确定, 文件类型:{输入名1: “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 storage = {}; var limits = {}; for(key in obj) { 开关(键){ 案例'目的地':             storage.destination = function(request,file,cb){             CB(NULL,obj.destination [file.fieldname]);             };             打破; 案例'文件名': storage.filename = function(request,file,cb){     如果(obj.filename [file.fieldname]!=未定义)     {                 诺姆= obj.filename [file.fieldname];                 如果(诺姆==未定义)                     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; 

case'FieldNameSize': limits.fieldNameSize = function(request,file,cb){     如果(obj.fieldNameSize [file.fieldname]!=未定义) CB(NULL,obj.fieldNameSize [file.fieldname]); else返回cb(null,true); }; 打破; case'fieldSize': limits.fieldSize = function(request,file,cb){     如果(obj.fieldSize [file.fieldname]!=未定义) CB(NULL,obj.fieldSize [file.fieldname]); else返回cb(null,true); }; 打破; 案例'字段': limits.fields = function(request,file,cb){     如果(obj.fields [file.fieldname]!=未定义) CB(NULL,obj.fields [file.fieldname]); else返回cb(null,true); }; 打破; case'fileSize': limits.fileSize = function(request,file,cb){     如果(obj.fileSize [file.fieldname]!=未定义) CB(NULL,obj.fileSize [file.fieldname]); else返回cb(null,true); }; 打破; 案件'档案': limits.files = function(request,file,cb){     如果(obj.files [file.fieldname]!=未定义) CB(NULL,obj.files [file.fieldname]); else返回cb(null,true); }; 打破; 案例'部分': limits.parts = function(request,file,cb){     如果(obj.parts [file.fieldname]!=未定义) CB(NULL,obj.parts [file.fieldname]); else返回cb(null,true); }; 打破; case'filetypes':         upld.fileFilter = function(req,file,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());             if(mimetype&& extname){return cb(null,true); }             cb(“Sono Accettate solo le seguenti estensioni:”+ obj.filetypes [file.fieldname]);             } else返回cb(null,true);         };         打破; } }         如果(storage.filename ==未定义)             storage.filename = function(request,file,cb){ 。诺姆= file.originalname.split( '/')POP()修剪();                 cb(null,Date.now()+“_”+ nome);             }; 如果(limits.fileSize ==未定义)     limits.fileSize = defaultMaxSize; / * var maxSize = l.maxSize;             limitsfileSize = function(request,file,cb){ if(file.size>(maxSize)){cb(null,true); } else {cb(“Il filenonpuòpearepiùdi”+ maxSize +“MB”); }             };             * / upld.storage = multer.diskStorage(storage); upld.limits =极限;

return multer(upld).any();

};