DoraCMS

您现在的位置是:首页>文档内容页

文档详情

第7天 Post方法与上传——更新后的代码

doramart 2015-10-16 16:01:29 NodeJs225856
​lib/post.js 更新后的源代码

更新后的代码

lib/post.js 更新后的源代码

var qs = require("querystring");

module.exports = function post(req,res,next){

    var body_data = "";
    req.files = {}; 
    req.body = {};

    req.on("data",function(chunk){
        body_data += chunk;
    })

    req.on("end",function(){

        var contentType = req.headers["content-type"];

        // isMulti 如果是true,表示是设置了enctype="multipart/form-data" 属性
        var isMulti = /(boundary=)/gi.test(contentType);

        if(isMulti){
            var boundary = RegExp["$'"];

            var boundaryStandard = "--"+boundary+"\r\n";
            var boundaryEnd = boundaryStandard+"--";

            //删除头尾边界字符串
            body_data = body_data.substring(boundaryStandard.length,body_data.length-boundaryEnd.length);

            var fields = body_data.split(boundaryStandard);

            // 头信息和体信息的之间分割字符串
            var RN = "\r\n\r\n";

            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);
                    console.log(fields[0])
                    body = body.substring(0,body.length - RN.length/2);

                if(isFile){
                    req.files[fieldName] = new Buffer(body);
                }else{
                    req.body[fieldName] = body;
                }

            })
        }else{
            try{
                req.body = qs.parse(body_data);
            }catch(e){}
        }

        next();

    });
}

文章评论

取消回复
登录 参与评论

评论列表(