• node07---post请求、表单提交、文件上传


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <form action="dopost" 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>
    /**
     * poest提交表单
     */
    var http = require("http");
    var querystring = require("querystring");
    
    
    //创建服务器
    var server = http.createServer(function(req,res){//每次请求执行函数,外面的已经执行了。
        
        //如果你的访问地址是这个,并且请求类型是post
        if(req.url == "/dopost" && req.method.toLowerCase() == "post"){
            console.log("req.url:" + req.url);
            console.log("req.method:" + req.method);
            var alldata = "";
            //下面是post请求接收的一个公式,node为了追求极致,它是一个小段一个小段接收的。
            //接受了一小段,可能就给别人去服务了。防止一个过大的表单阻塞了整个进程,异步操作。
            req.addListener("data",function(chunk){
                alldata += chunk;
            });
            //全部传输完毕
            req.addListener("end",function(){
                var datastring = alldata.toString();
                res.end("success");
                //将datastring转为一个json对象
                var dataObj = querystring.parse(datastring);
                console.log(dataObj);
                console.log(dataObj.name);
                console.log(dataObj.sex);
            });
        }
    });
    
    server.listen(3000,"127.0.0.1");
    三、post请求
    1        var alldata = "";
    2        //下面是post请求接收的一个公式
    3        //node为了追求极致,它是一个小段一个小段接收的。
    4        //接受了一小段,可能就给别人去服务了。防止一个过大的表单阻塞了整个进程
    5        req.addListener("data",function(chunk){
    6            alldata += chunk;
    7        });
    8        //全部传输完毕
    9        req.addListener("end",function(){
    10            console.log(alldata.toString());
    11            res.end("success");
    12        });
    
    原生写POST处理,比较复杂,要写两个监听。文件上传业务比较难写。
    所以,用第三方模块。formidable。
    
    只要涉及文件上传,那么form标签要加一个属性:
    1<form action="http://127.0.0.1/dopost" method="post" enctype="multipart/form-data">
    /**
     * 文件上传,改变了表单提交方式。
     */
    var http = require("http");
    var formidable = require('formidable');
    var util = require("util");
    
    console.log("qqq");
    //创建服务器
    var server = http.createServer(function(req,res){
        //如果你的访问地址是这个,并且请求类型是post
           console.log("qqqqqqq");
        if(req.url == "/dopost" && req.method.toLowerCase() == "post"){
            var form = new formidable.IncomingForm();
            //设置文件上传存放地址
            form.uploadDir = "./uploads";
            //执行里面的回调函数的时候,表单已经全部接收完毕了。
            //姓名性别全在fields对象里面,files是文件
            form.parse(req, function(err, fields, files) {
                if(err){
                    throw err;
                }
                console.log(fields);
                console.log(files);
                console.log(util.inspect({fields: fields, files: files}));
                //所有的文本域、单选框,都在fields存放;
                //所有的文件域,files
                res.writeHead(200, {'content-type': 'text/plain'});
    
                res.end("成功");
            });
        }
    });
    
    server.listen(3000);

     文件上传并改名

    /**
     * Created by Danny on 2015/9/20 15:35.
     */
    var http = require("http");
    var formidable = require('formidable');
    var util = require("util");
    var fs = require("fs");
    var sd = require("silly-datetime");
    var path = require("path");
    
    
    //创建服务器
    var server = http.createServer(function(req,res){
        //如果你的访问地址是这个,并且请求类型是post
        if(req.url == "/dopost" && req.method.toLowerCase() == "post"){
            //Creates a new incoming form.
            var form = new formidable.IncomingForm();
            //设置文件上传存放地址
            form.uploadDir = "./uploads";
            //执行里面的回调函数的时候,表单已经全部接收完毕了。
            form.parse(req, function(err, fields, files) {
                //if(err){
                //    throw err;
                //}
                //console.log(util.inspect({fields: fields, files: files}));
    
                //时间,使用了第三方模块,silly-datetime
                var ttt = sd.format(new Date(), 'YYYYMMDDHHmmss');
                var ran = parseInt(Math.random() * 89999 + 10000);
                var extname = path.extname(files.tupian.name);
                //执行改名
                var oldpath = __dirname + "/" + files.tupian.path;
                //新的路径由三个部分组成:时间戳、随机数、拓展名
                var newpath = __dirname + "/uploads/" + ttt + ran + extname;
    
                //改名
                fs.rename(oldpath,newpath,function(err){
                    if(err){
                        throw Error("改名失败");
                    }
                    res.writeHead(200, {'content-type': 'text/plain'});
                    res.end("成功");
                });
            });
        }else if(req.url == "/"){
            //呈递form.html页面
            fs.readFile("./form.html",function(err,data){
                res.writeHead(200, {'content-type': 'text/html'});
                res.end(data);
            })
        }else{
            res.writeHead(404, {'content-type': 'text/html'});
            res.end("404");
        }
    });
    
    server.listen(80,"192.168.41.36");
  • 相关阅读:
    3.16 使用Zookeeper对HDFS HA配置自动故障转移及测试
    4、html的body内标签之input系列
    Gym
    Gym
    Gym
    Gym
    Gym
    Big Event in HDU HDU1171 (多重背包)
    Coins POJ 1742 多重背包部分和
    HDU 1059 Dividing 多重背包
  • 原文地址:https://www.cnblogs.com/yaowen/p/7036201.html
Copyright © 2020-2023  润新知