打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
可以直接html5标签multiple多input多文件、单input多文件上传.

formidable 上传 - html5 multiple 多文件上传

字数451 阅读607 评论0 

formidable根据文档,form.multiples = true; 我并没有得到预期的[ files ]
所以,写了以下的处理方式: 把所有http请求字段、上传文件合并到一个列表:

{    'name' : 'lili',    'phone' : '12345600000',    'upload_one' : {        '1.gif' : { ..., name:'1.gif', path:'/home/aa/tmp/2190eq0919.gif', ... },        '2.txt' : {...},        ...    },   'upload_two' : {        '11.gif' : { ..., name:'1.gif', path:'/home/aa/tmp/2190eq0919.gif', ... },        '21.txt' : {...},        ...    },}
可以直接html5标签multiple多input多文件、单input多文件上传.
源码如下:
var utility  = require('utility'),    find     = require('./find'),    http     = require('http'),    path     = require('path'),    fs       = require('fs'),    fd       = require('formidable');function connect (routes, conf, cons) {    return function (req, res) {         var fif = new fd.IncomingForm(),                 ffiles = {},                 route;                                        // 路由处理器        fif.keepExtensions = true;                        // 保留扩展名        fif.uploadDir      = conf.ldir.tmp;               // 上传临时目录        fif.on('file', function(name, file) {            if (typeof ffiles[name] !== 'object' || ffiles[name] === null) {                ffiles[name] = {};            }            ffiles[name][file.name] = file;        });        fif.parse(req, function (err, fields, files) {             res.req  = req;               // utility.merge为合并函数, 将多个对象合并,类似jQuery的extend            // 不再列出            req.body = utility.merge(fields, ffiles);              // 路由处理函数查找,可能每个人写法都不一样            route = find(routes, req.headers.host, req.url, req.method);              if (typeof route.handler === 'function') {                  route.handler(req, res, conf, cons);            } else {                  // 404处理            }        });    };}module.exports = connect;

重点是

var ffiles = {};fif.on('file', function(name, file) {  if (typeof ffiles[name] !== 'object' || ffiles[name] === null) {    ffiles[name] = {};  }  ffiles[name][file.name] = file;});
建立一个对象ffiles, 存储解析的文件内容

ffiles组装完后是这样的:

{  'upload_one' : {    '1.gif' : {..., 'name':'1.gif', path:'...', type:'...', ...},    '2.txt' : {...}  }}

然后将ffiles附到req.body,提升使用范围.

req.body.upload_one['1.gif'].name 获取文件名req.body.upload_one['1.gif'].type 获取文件类型req.body.upload_one['1.gif'].path 获取文件上传磁盘路径

...
其他查看console.log(req.body)


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
大家好,我是MM,请多多关照
input file实现多次上传文件(不会覆盖上次上传的文件)
Set
asp.net多文件上传实例讲解
你可能不知道的强大 HTML 属性
使用 FFmpeg 制作 GIF
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服