formidable模块实现了上传和编码图片和视频。它支持GB级上传数据处理,支持多种客户端数据提交。
- 引入formidable模板
var http = require("http");
var fs = require("fs");
var url = require("url");
var formidable = require("formidable");
- 创建服务器,然后通过GET方式获取到URL,继而找到我们在前台输入的路径
var pathname = url.parse(req.url,true).pathname;
- 创建一个名为upload的HTML,通过form实现图片上传
<form action="/upload" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="username"><br />
年龄:<input type="text" name="age"><br />
图像:<input type="file" name="img"><br />
<input type="submit" value="提交"><br />
</form>
- 通过pathname可以判断用户是否提交信息。
var form = new formidable.IncomingForm();创建一个form表单
form里面的parse方法解析node.js中request请求中包含的form表单提交的数据,回调函数里面会有我们在前端提交的字段(fileds),以及图片的详细信息(files)。
返回的字段是一个对象,如果想保存到文档里面,需要解析成字符串。
如果想吧上传后的图片保存到文件夹里面,我们首先要回的图片的路径,然后看是否有这个文件夹,如果没有创建一个文件夹,将图片保存到该路径下,并已该图片的原始名命名
if(pathname == "/upload"){
var form = new formidable.IncomingForm();
form.parse(req,function (err,fileds,files) {
if(err){
return console.log(err);
}else{
var dataFileds = JSON.stringify(fileds);
fs.writeFileSync("22.txt",dataFileds);
console.log(files);
var rs = fs.createReadStream(files.img.path);
if(!fs.existsSync("img")){
fs.mkdirSync("img");
}
var ws = fs.createWriteStream("./img/"+files.img.name);
rs.pipe(ws);
rs.on("end",function () {
res.setHeader("Content-type","text/html;charset=utf-8")
res.write("上传成功");
res.end();
})
}
网友评论