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

时间:2024-01-16 11:02:56

当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参数了。