post请求发送一个表单
在nodejs中,post请求是一小段一小段接收的,为了防止一个巨大无比的表单阻塞了线程,故一段一段接收,在接收一小段时,可能还会去服务别的请求。
queryString:将post发送的值转化为对象
name=sy&age=21&sex=famela&host=sichuan&host=shanxi
queryString.parse('name=sy&age=21&sex&host=sichuan&host=shanxi')
//=>{name:"sy",age:21,sex:
"",host:['sichuan','shanxi']}
上传图片:formidable
在上传文件类型时,form表单必须添加enctype="mutipart/form-data"
属性,不对其进行字符编码
<form action="http://xxxxxxx:3000/dopost" method="POST" enctype="multipart/form-data">
<input type="text" name="name" value="" placeholder="请输入姓名">
<input type="radio" name="sex" value="女">女
<input type="radio" name="sex" value="男">男
<input type="file" name="picture">
<input type="submit">
</form>
- 安装formidable:
npm install formidable --save
var http=require("http");
var formidable=require("formidable");
var server=http.createServer(function(req,res){
if(req.url=="/dopost"&&req.method.toLowerCase()=="post"){
//创建一个新的接收文件
var form=new formidable.IncomingForm();
//接收提交图片的路径为test文件夹
form.uploadDir="./test"
//执行其中的回调函数时,所有的文件已经接收完了
form.parse(req,function(err,fields,fiels){
//所有的文本域全在fields中
//所有的文件域全在fiels
res.writeHead(200,{"Content-type":"text/plain;charset=UTF-8"});
console.log("success")
res.end("success")
});
}
})
server.listen(3000,"192.168.124.170")
文件夹中接收到的图片是没有后缀名的,并且名字是乱码模式,手动添加一个.jpg
可查看图片;
那么如果想要将名字统一呢?
可以使用之前的fs中的fs.rename(oldpath,newpath)
更改,其实是更改的路径罢了。
var http=require("http");
var formidable=require("formidable");
var path=require("path");
var fs=require("fs")
var count=0;
var server=http.createServer(function(req,res){
if(req.url=="/dopost"&&req.method.toLowerCase()=="post"){
//创建一个新的接收文件
var form=new formidable.IncomingForm();
form.uploadDir="./test"
//执行其中的回调函数时,所有的文件已经接收完了
form.parse(req,function(err,fields,fiels){
//所有的文本域全在fields中
//所有的文件域全在fiels
var oldname=__dirname+"/test/"+fiels.picture.path.split("\\")[1];
var newname=__dirname+"/test/"+(++count)+path.extname(fiels.picture.name);
fs.rename(oldname,newname,function(err){
if(err){
throw err
}
res.writeHead(200,{"Content-type":"text/plain;charset=UTF-8"});
res.end(newname)
})
});
}else if(req.url="/"){
fs.readFile("./fang.html",function(err,data){
if(err){
throw err
}
res.writeHead(200,{"Content-type":"text/html;charset=UTF-8"});
res.end(data)
})
}
})
server.listen(3000,"192.168.124.170")
查看test文件可知: