NodeJs学习笔记(七):原生Post请求+formidable

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文件可知:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值