第7天 Post方法与上传——解析分类数据
表单的字段有两种,一个是表单字段,一个是二进制的文件。而这两种格式的不同在于信息头,下面是个信息头的例子:
表单字段信息头
解析分类数据
表单的字段有两种,一个是表单字段,一个是二进制的文件。而这两种格式的不同在于信息头,下面是个信息头的例子:
表单字段信息头
Content-Disposition: form-data; name="title" \r\n\r\n
二进制文件信息头
Content-Disposition: form-data; name="img"; filename="favicon2.ico" \r\n Content-Type: image/x-icon \r\n\r\n
解析过程要分别处理,最终要把表单字段的信息,解析后放入 req.body 。把上传文件的信息,保存在req.files中。下面是解析代码:
// 头信息和体信息的之间分割字符串 var RN = "\r\n\r\n"; var files = {}; // 储存解析出的上传文件的信息 var bodys = {}; // 储存表单字段的信息 fields.forEach(function(field){ var index = field.indexOf(RN); // 解析出头信息块 var header = field.substring(0,index); // 从头信息中解析出表单字段的名称,也就是表单的name属性值。 /name=\"(.*?)\"/g.test(header); var fieldName = RegExp.$1; // 判断是上传的文件,还是一般的表单字段。 var isFile = /filename/g.test(header); // 解析出数据体 var body = field.substring(index+RN.length); body = body.substring(0,body.length - RN.length/2); if(isFile){ files[fieldName] = new Buffer(body); }else{ bodys[fieldName] = body; } })
代码中把二进制上传文件信息保存到files里,一般的表单字段信息保存到bodys中。通过 new Buffer(字符串) 的方式转换成二进制对象。
下一节,要把这些代码整合一下,集成到post.js中间件里。
很赞哦! ( 0
)