【问题标题】:CanI upload many files in different folder using multer and a single html form?我可以使用 multer 和单个 html 表单上传不同文件夹中的许多文件吗?
【发布时间】:2016-09-27 14:06:17
【问题描述】:

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

我可以使用这三种方法:

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

{ name: '课程'}]); .任何()

第一个接受多个文件,但必须具有相同的字段名称;
第二个接受许多文件,并且可以传递名称(我认为这对我来说应该是正确的道路);
第三个接受我在 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 (请求,响应,下一个){

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

【问题讨论】:

    标签: node.js file-upload multer


    【解决方案1】:

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

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

    var obj={ 目的地:{输入名称1:'./uploads',输入名称:'./uplds'}, 文件名:{ 输入名称 1:'file1',输入名称 2:'file2'}, 字段名称大小:未定义, 字段大小:未定义, 字段:未定义, 文件大小:{输入名称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 = function (obj, next) { var upld = {}; 变量存储={}; 变量限制 = {}; for (obj 中的键) { 开关(键){ 案例“目的地”: storage.destination=函数(请求,文件,cb){ cb(null,obj.destination[file.fieldname]); }; 休息; 案例“文件名”: storage.filename=函数(请求,文件,cb){ if(obj.filename[file.fieldname]!=undefined) { 名称=obj.filename[file.fieldname]; 如果(名称==未定义) 名称=file.originalname.substring(0, file.originalname.lastIndexOf("."));

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

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

    cb(null, nome);
            };
            break; 
    

    案例“字段名称大小”: limits.fieldNameSize = 函数(请求、文件、cb){ if(obj.fieldNameSize[file.fieldname]!=undefined) cb(null,obj.fieldNameSize[file.fieldname]); 否则返回 cb(null, true); }; 休息; 案例“字段大小”: limits.fieldSize=函数(请求、文件、cb){ if(obj.fieldSize[file.fieldname]!=undefined) cb(null,obj.fieldSize[file.fieldname]); 否则返回 cb(null, true); }; 休息; 案例“字段”: limits.fields = 函数(请求、文件、cb){ 如果(obj.fields [file.fieldname]!=未定义) cb(null,obj.fields[file.fieldname]); 否则返回 cb(null, true); }; 休息; 案例“文件大小”: 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=新的正则表达式(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]); } 否则返回 cb(null, true); }; 休息; } } 如果(存储.文件名==未定义) storage.filename=函数(请求,文件,cb){ 名称=file.originalname.split('/').pop().trim(); cb(null, Date.now()+"_"+nome); }; 如果(limits.fileSize==未定义) 限制.fileSize=defaultMaxSize; /* var maxSize=l.maxSize; 限制文件大小=函数(请求,文件,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=限制;

    返回 multer(upld).any();

    };

    【讨论】:

    • @John Wick 你说的是缩进吗?抱歉,我完全失明了,对我来说,100% 做到这一点非常困难,以至于很多时候我都不检查它是否正确。你能告诉我哪里错了吗?我会更正代码!
    猜你喜欢
    • 1970-01-01
    • 2018-11-13
    • 2014-09-13
    • 1970-01-01
    • 2021-10-07
    • 2018-09-04
    • 1970-01-01
    • 2014-03-29
    相关资源
    最近更新 更多