原生写POST处理,比较复杂,要写两个监听。文件上传业务比较难写。 所以,用第三方模块。formidable。用于解析表单数据的Node.js模块,特别是文件上传。 npm官网搜索formidable 可以下载该模块放进node_modules文件夹内, 建议在控制台在使用:
npm install formidable
下载该模块 。
post.html为表单提交页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:3000/uploads" method="post" enctype="multipart/form-data" >
<p>
姓名 : <input type="text" name="name">
</p>
<p>
性别 :
<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女
</p>
<p>
爱好:
<input type="checkbox" name="hobby" value="睡觉" />睡觉
<input type="checkbox" name="hobby" value="吃饭" />吃饭
<input type="checkbox" name="hobby" value="足球" />足球
</p>
<p>
图片:
<input type="file" name="tupian" />
</p>
<p>
<input type="submit" />
</p>
</form>
</body>
</html>
在表单提交后处理页面,需要的模块用npm install 模块名 下载需要引用的模块
var http = require("http");
var formidable = require('formidable');
var fs = require("fs");
var util = require("util");
var sd = require("silly-datetime");
var path = require("path");
//创建服务器
var server = http.createServer(function(req,res){
//如果你的访问地址是这个,并且请求类型是post
if(req.url == "/uploads" && req.method.toLowerCase() == "post"){
//Creates a new incoming form.
var form = new formidable.IncomingForm();
//设置文件上传存放地址
form.uploadDir = "./uploads";
//执行里面的回调函数的时候,表单已经全部接收完毕了。
form.parse(req, function(err, fields, files) {
//使用第三方模块silly-datetime
var t = sd.format(new Date(),'YYYYMMDDHHmmss');
//生成随机数
var ran = parseInt(Math.random() * 8999 +10000);
//拿到扩展名
var extname = path.extname(files.tupian.name);
//旧的路径
var oldpath = __dirname + "/" + files.tupian.path;
//新的路径
var newpath = __dirname + '/uploads/'+t+ran+extname;
//改名
fs.rename(oldpath,newpath,function (err) {
if(err){
throw Error("改名失败");
}
res.writeHead(200, {'content-type': 'text/plain'});
res.end("成功");
});
//所有的文本域、单选框,都在fields存放;
//所有的文件域,files
res.writeHead(200, {'content-type': 'text/plain'});
res.end("success");
});
}
});
server.listen(3000,"127.0.0.1");