2016-09-27 21 views
1

我想開發一個模塊,應該從一個單一的HTML表單上傳文件。 想象一下包含兩個文件的表單:
1)用戶的化身;
2)簡歷同一個用戶。
我會上傳/ avatar中的第一個文件和/ cv中的第二個文件。CanI可以使用multer和單個html表單上傳不同文件夾中的多個文件?

我可以用來做三個方法:

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

{名稱: '課程'}]); 。任何()

第一個接受許多文件,但它必須具有相同的字段名稱;
第二個接受多個文件,它的名稱可以通過(我認爲它應該是正確的道路);
第三個接受所有文件我在html表單上設置的所有名稱。 那麼,它的工作很好,但問題是我不知道如何爲每個文件設置不同的文件夾!

最後的審判是:

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

但它返回:

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

傳遞工作正確單個文件! 有人可以幫助我嗎?

回答

0

我解決了我自己! 這是我的不完美的解決方案(它可以很好地用於目的地,文件名和文件類型,但不MAXSIZE和文件),但是,我想分享我的代碼:

在app.js我創建一個對象是這樣的:

var obj = {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}, 部分:undefined, filetypes:{input-name1:「jpeg,jpg」} };

和在rules_upload.js:

變種路徑=要求( '路徑'); var multer = require('multer'); var defaultMaxSize = 3 * 1024 * 1024; var defaultFiles = 1;

exports.upload = function(obj,next){ var upld = {}; var storage = {}; var limits = {}; 爲(在OBJ鍵) { 開關(鍵){ 情況下 '目標': storage.destination =函數(請求,文件,CB){ CB(NULL,obj.destination [file.fieldname]); }; 休息; 案例'文件名': 存儲。如果(obj.filename [file.fieldname]!=未定義) nome = obj.filename [file.fieldname]; (nome ==未定義) nome = file.originalname.substring(0,file.originalname.lastIndexOf(「。」)); 。

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

} 別的諾姆= file.originalname.split( '/')POP()修剪();

cb(null, nome); 
     }; 
     break; 

情況下 'FieldNameSize': limits.fieldNameSize =函數(請求,文件,CB){ 如果(obj.fieldNameSize [file.fieldname] =未定義!) CB(NULL,obj.fieldNameSize [ file.fieldname]); else return cb(null,true); }; 休息; (obj.fieldSize [file.fieldname]!=未定義) cb(null,obj.fieldSize [file.fieldname]); else return cb(null,true); }; 休息; (obj.fields [file.fieldname]!= undefined) cb(null,obj.fields [file.fieldname]); else return cb(null,true); }; 休息; (obj.fileSize [file.fieldname]!=未定義) cb(null,obj.fileSize [file.fieldname]); else return cb(null,true); }; 休息; (obj.files [file.fieldname]!= undefined) cb(null,obj.files [file.fieldname]); else return cb(null,true); }; 休息; (obj.parts [file.fieldname]!=未定義) cb(null,obj.parts [file.fieldname]); else return 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()); (mimetype & & extname){return cb(null,true); }(「Sono Accettate solo le seguenti estensioni:」+ obj.filetypes [file.fieldname]); } else return cb(null,true); }; 休息;如果(storage.filename == undefined) storage.filename = function(request,file,cb)nome = file.originalname.split('/')。pop()。trim(); cb(null,Date.now()+「_」+ nome); };如果(limits.fileSize == undefined) limits.fileSize = defaultMaxSize; /* var maxSize = 1。MAXSIZE; limitsfileSize = function(request,file,cb)if(file.size>(maxSize)){cb(null,true); } else {cb(「Il file nonpuòpesarepiùdi」+ maxSize +「MB」); } }; */ upld.storage = multer.diskStorage(storage); upld.limits =限制;

return multer(upld).any();

};

相關問題