使用post方式提交表单如何获取图片数据及其他文本参数[NodeJS]?

当POST方式提交包含图片的表单时,如上传图片时,需要在<form>字段需要添加参数enctype="multipart/form-data",表明以二进制方式传输数据。假如表单中包含其他文本参数,如用户名username,用常规方式是无法获取post参数的,如:

<html>
        <head>
                <meta http-equiv="Content-Type" content="text/html" charset="UTF-8" />
        </head>
        <body>
                <form action="/upload" enctype="multipart/form-data" method="post">
                        <input type="file" name="upload" />
                        <input type="text" name="username" value="123"/>
                        <input type="submit" value="确定" />
                </form>
        </body>
</html>
   var postdata = "";
    request.addListener("data",function(postchunk){
        postdata += postchunk;
    });

    //POST结束输出结果
    request.addListener("end",function(){
        console.log(postdata);
        var params = querystring.parse(postdata);
        console.log(params["username"]);
    });

控制台显示的将是undefined,而不是我们所期望的123。因为整个表单都是以二进制传输数据,request就获得username字段的值。

这种情况,就需要引入第三方formidable模块:

    var form = new formidable.IncomingForm();
    form.uploadDir = uploadImgDir;
    form.parse(request, function(error, fields, files) {
        console.log("parsing done");
        console.log(files.upload.path);
        console.log(fields["username"]);
        fs.renameSync(files.upload.path, uploadImgDir + "name.png");
  });

在调用formidable.IncomingForm的parse方法后,其回调会返回三个参数,分别为异常,文本参数Object和图片文件数据。

在回调中使用fields["username"],就可以正常获取username参数了。