我可以使用multer和单个html格式将许多文件上传到不同的文件夹中吗? [英] CanI upload many files in different folder using multer and a single html form?

查看:76
本文介绍了我可以使用multer和单个html格式将许多文件上传到不同的文件夹中吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to develop a module that should upload files from a single html form. Imagine a form that contains two files:
1) the avatar of the user;
2) the curriculum vitae the same user.
I would upload the first file in /avatar and the second in /cv.

我可以使用这三种方法:

I can use to do that three method:

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

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

{ name: 'curriculum'}]); . any()

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

The first accepts many files but its must have the same fields name;
The second accepts many files and its can have the names passed (and I think it should be right road for me);
the third accepts all files all names I set on html form. Well, its work well but the problem is that I don't know how set different folders for each file!

上次审判是:

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

但它返回:

错误:意外字段

Error: Unexpected field

问题不在代码的其他部分,因为如果我启动它, 代码: app.route('/upload').post(.upload(fileObj1).array('avatar'),函数 (请求,响应,下一个){

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) {

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

passing a single file it works correctly! Someone can help me?

推荐答案

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

I resolved myself! This is my not perfect solution (it works well for destination, filename and filetypes but not for maxsize and files) however, I want share my code:

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

in app.js I create an object like this:

var obj = { 目的地:{input-name1:'./uploads',input-name:'./uplds'}, 文件名:{input-name1:'file1',input-name2:'file2'}, FieldNameSize:未定义, fieldSize:未定义, 字段:未定义, fileSize:{输入名称1:2 * 1024 * 1024,输入名称2:10 * 1024 * 1024}, 文件:{input-name1:3,input-name2:1}, 零件:未定义, 文件类型:{input-name1:"jpeg,jpg"} };

var obj={ destination: {input-name1:'./uploads', input-name:'./uplds'}, filename: { input-name1:'file1', input-name2:'file2'}, FieldNameSize:undefined, fieldSize:undefined, fields:undefined, fileSize:{input-name1:2*1024*1024, input-name2:10*1024*1024}, files:{input-name1:3,input-name2:1}, parts:undefined, filetypes:{input-name1:"jpeg,jpg"} };

和rules_upload.js:

and in rules_upload.js:

var path = require('path'); var multer = require('multer'); var defaultMaxSize = 3 * 1024 * 1024; var defaultFiles = 1;

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 = {}; 为(obj中的键) { 开关(键){ 案例目的地": storage.destination =函数(请求,文件,cb){ cb(null,obj.destination [file.fieldname]); }; 休息; 大小写文件名": storage.filename =功能(请求,文件,cb){ if(obj.filename [file.fieldname]!=未定义) { nome = obj.filename [file.fieldname]; 如果(nome ==未定义) nome = file.originalname.substring(0,file.originalname.lastIndexOf(."));

exports.upload = function (obj, next) { var upld = {}; var storage={}; var limits = {}; for (key in obj) { switch (key) { case 'destination': storage.destination= function (request, file, cb) { cb(null,obj.destination[file.fieldname]); }; break; case '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();

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

cb(null, nome);
        };
        break; 

案例'FieldNameSize': limits.fieldNameSize =函数(请求,文件,cb){ if(obj.fieldNameSize [file.fieldname]!=未定义) cb(null,obj.fieldNameSize [file.fieldname]); 否则返回cb(null,true); }; 休息; 案例"fieldSize": limits.fieldSize =函数(请求,文件,cb){ if(obj.fieldSize [file.fieldname]!= undefined) cb(null,obj.fieldSize [file.fieldname]); 否则返回cb(null,true); }; 休息; 案例字段": limits.fields =函数(请求,文件,cb){ if(obj.fields [file.fieldname]!= undefined) cb(null,obj.fields [file.fieldname]); 否则返回cb(null,true); }; 休息; 案例'fileSize': 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 = new RegExp(f); var mimetype = re.test(file.mimetype); var extname = re.test(path.extname(file.originalname).toLowerCase()); if(MIME类型&& extname){返回cb(null,true); } cb("Sono Accettate solo le seguenti estensioni:" + obj.filetypes [file.fieldname]); } 否则返回cb(null,true); }; 休息; } } 如果(存储.文件名==未定义) storage.filename =函数(请求,文件,cb){ nome = file.originalname.split('/').pop().trim(); cb(null,Date.now()+"_" + nome); }; 如果(limits.fileSize ==未定义) limits.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 = limits;

case 'FieldNameSize': limits.fieldNameSize = function (request, file, cb) { if(obj.fieldNameSize[file.fieldname]!=undefined) cb(null,obj.fieldNameSize[file.fieldname]); else return cb(null, true); }; break; case 'fieldSize': limits.fieldSize= function (request, file, cb) { if(obj.fieldSize[file.fieldname]!=undefined) cb(null,obj.fieldSize[file.fieldname]); else return cb(null, true); }; break; case 'fields': limits.fields = function (request, file, cb) { if(obj.fields[file.fieldname]!=undefined) cb(null,obj.fields[file.fieldname]); else return cb(null, true); }; break; case 'fileSize': limits.fileSize = function (request, file, cb) { if(obj.fileSize[file.fieldname]!=undefined) cb(null,obj.fileSize[file.fieldname]); else return cb(null, true); }; break; case 'files': limits.files = function (request, file, cb) { if(obj.files[file.fieldname]!=undefined) cb(null,obj.files[file.fieldname]); else return cb(null, true); }; break; case 'parts': limits.parts = function (request, file, cb) { if(obj.parts[file.fieldname]!=undefined) cb(null,obj.parts[file.fieldname]); else return cb(null, true); }; break; 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 ) {return cb(null, true); } cb("Sono Accettate solo le seguenti estensioni: " + obj.filetypes[file.fieldname]); } else return cb(null, true); }; break; } } if(storage.filename==undefined) storage.filename= function (request, file, cb) { nome=file.originalname.split('/').pop().trim(); cb(null, Date.now()+"_"+nome); }; if(limits.fileSize==undefined) limits.fileSize=defaultMaxSize; /* var maxSize=l.maxSize; limitsfileSize= function (request, file, cb) { if(file.size>(maxSize)) { cb(null,true); } else { cb("Il file non può pesare più di"+maxSize+" MB" ); } }; */ upld.storage= multer.diskStorage(storage); upld.limits=limits;

return multer(upld).any();

return multer(upld).any();

};

这篇关于我可以使用multer和单个html格式将许多文件上传到不同的文件夹中吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆