表单提交后端如何接收数据_html怎么接收表单提交的内容

表单提交后端如何接收数据_html怎么接收表单提交的内容用POST请求,后台原生接收的一个公式:req.addListener("data",function(chunk){alldata+=chunk;})//当全部传输完毕之后req.addListener("end",function(){console.log(alldata,toString());req.end("success");})现…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

用POST请求,后台原生接收的一个公式:

req.addListener("data",function(chunk){ 
   
   alldata += chunk;
})
//当全部传输完毕之后
req.addListener("end",function(){ 
   
    console.log(alldata,toString());
    req.end("success");
})

现举例使用原生post请求公式在后台接收数据
表单页面:

//因为后面有图片上传,所以需要在form中添加属性 enctype="multipart/form-data"
<form action="http://127.0.0.1:2000/dopost" enctype="multipart/form-data" method="post">
    <p>
        姓名:<input type="text" name="name">
    </p>
    <p>
        性别:<input type="radio" name="sex" value="男"><input type="radio" name="sex" value="女"></p>
    <p>
        图片:
        <input type="file" name="picture">
    </p>
    <p>
        爱好:<input type="checkbox" name="hobby" value="网球">网球
              <input type="checkbox" name="hobby" value="足球">足球
              <input type="checkbox" name="hobby" value="羽毛球">羽毛球

    </p>
    <p>
        <input type="submit"/>
    </p>

</form>

接收程序:

var querystring = require("querystring");
//创建服务器
var server = http.createServer(function (req,res) { 
   
    //如果你访问的地址是表单所提交的这个地址,并且表单提交的方式是POST
    // toLowerCase即将字母都转为小写
    //可能接受一小段之后就去给别人服务了,放置过大的表单阻塞了整个进程
    if(req.url == "/dopost"&&req.method.toLowerCase() == "post"){
        var alldata = "";
        req.addListener("data",function (chunk) { 
   
            alldata += chunk;
            console.log(chunk);
            //全部传输完毕
            req.addListener("end",function () { 
   
              var datastring = alldata.toString();
             var data = querystring.parse(datastring,null,null);
             console.log(data);

               res.end("success");

            })

        });
    }

}).listen(1000,'127.0.0.1');
console.log(1);

如果不将接收到的数据序列化,输出的将是一串二进制的缓存数据:
这里写图片描述
序列化之后:
这里写图片描述

然而,我们可以采取引入模块的做法来简化原生代码,并且可以实现文件上传的:
首先,我们需要在cmd或者powershell中安装这个模块:
这里写图片描述

然后,具体实现代码:

“`
var http = require(“http”);
var fs = require(“fs”);
var querystring = require(“querystring”);
var formidable = require(“formidable”);
var util = require(“util”);
//创建服务器
var server = http.createServer(function (req,res) {
//如果你访问的地址是表单所提交的这个地址,并且表单提交的方式是POST
// toLowerCase即将字母都转为小写
//可能接受一小段之后就去给别人服务了,放置过大的表单阻塞了整个进程
if(req.url == “/dopost”&&req.method.toLowerCase() == “post”){
var form = new formidable.IncomingForm();
//设置文文件上传存刚的地址
form.uploadDir = “./uploads”;
//执行里面回调函数时候,表单已经全部接受完毕
form.parse(req, function(err, fields, files) {

        //所有的文本域,单选框都放在fields中,所有的文件域都放在files中
        // res.writeHead(200, {'content-type': 'text/plain'});
        // res.write('received upload:\n\n');
       console.log( util.inspect({fields: fields, files: files}));
        res.end("success");

        // res.end(util.inspect({fields: fields, files: files}));
    });


}

}).listen(2000,’127.0.0.1’);
console.log(1);
“`
util.inspect(object,[showHidden],[depth],[colors])是一个将任意对象转换为字符串的函数,通常用于调试和错误输出。它至少接受一个参数object,即要转换的对象。fields和files都是对象,我们利用util模块将其输出。 可以看到输出输出结果如下
这里写图片描述

我们利用这句语句:

 form.uploadDir = "./uploads";

将表单提交的文件存储到一个名为uploads的文件夹中

加强版:现在我们希望图片等文件上传之后,能够按照我们希望的格式存储下来:
我们可以看到在输出的files对象中,有path这个属性,现在我们的目的就是修改这个存储的路径为我们想要的格式这里写图片描述
1.修改文件路径,我们联想到使用fs模块中的重命名rename方法
2.我们将以前的路径存储下来,作为renname函数中的第一个参数

var oldpath =__dirname + "/"+ files.picture.path;

3.获取文件的扩展名:

   var path = require("path");
   var extname = path.extname(files.picture.name);

4.目的文件名是当前事件加上四位随机数再加上文件的扩展名

  var sd = require("silly-datetime");
  var ttt= sd.format(new Date(),'YYYYMMDDHHmm');
  //产生一个随机数
  var ran = parseInt(Math.random()*89999+10000);
  var newpath = __dirname + "/uploads/"+ttt+ran+extname;

5.将个参数传入函数


  fs.rename(oldpath,newpath,function (err) { 
   
                if(err){
                    throw Error("改名失败");
                }
                res.writeHead(200,{
  
  'Content-Type':'text/html;charset=UTF8'});
                res.end("成功");

            });

这样当表单上传图片文件的时候,就可以存储为我们想要的文件名了:
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185215.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 常见免费邮箱 SMTP 服务地址及端口「建议收藏」

    常见免费邮箱 SMTP 服务地址及端口「建议收藏」常见免费邮箱SMTP服务地址及端口邮箱服务服务器地址SSL端口号非SSL端口号163邮箱IMAPimap.163.com993143SMTPsmtp.163.com465/99425POP3pop.163.com995110QQ邮箱IMAPimap.qq.com993143SMTPsmtp.qq.com465/58725POP3pop.qq.com995–foxmail邮箱IMAPimap

    2022年9月27日
    2
  • 免费申请国外免费域名超详细教程「建议收藏」

    免费申请国外免费域名超详细教程「建议收藏」1.首先申请免费域名网站:https://my.freenom.com/domains.php2.填入域名,这里我们以xcflag为列(尽量选择复杂一点的或者五个字母以上的域名,因为简单的有些域名是需要收费的),点击检查可用性。3.可以看到很多免费的域名(用的谷歌翻译插件,翻译有时候不是很准确,free翻译过来应该是免费而不是自由,之后会写一些关于谷歌插件的笔记,详细讲解)4.我们选择xcflag.tk点击立即获取,稍等一会点击购物车查看绿色按钮5.默认三个月试用,这里下拉框我们选择十二个月

    2022年6月30日
    130
  • Java虚拟机:垃圾回收机制与垃圾收集器

    Java虚拟机:垃圾回收机制与垃圾收集器

    2021年4月10日
    178
  • 新概念51单片机C语言教程纠错(3)「建议收藏」

    新概念51单片机C语言教程纠错(3)「建议收藏」这一次错误在课本P140页例6.6.1中,这个例子在proteus仿真中再一次刷新了我的认知主要的bug在两个地方,第一仍是单片机上电后数码管的点亮问题,由于这个例题需要数码管不断刷新,所以bug的影响比前一篇纠错文章中更加明显;第二是由于没加延迟函数导致的无脑刷新问题。具体效果视频中有表现,其中的操作为,上位机输入1,单片机的ad打开,并返回voltage到调试助手,同时数码管显示数字。输入…

    2022年6月9日
    37
  • java 启动连接hsql

    java 启动连接hsqljava启动连接HSQL转载自: http://ehilcoder.iteye.com/blog/17228051.关于HSQLAHyperSQLDatabaseEachHyperSQLdatabaseiscalledacatalog.Therearethreetypesofcatalogdependingonhowthedataisstored.Typ

    2022年9月17日
    2
  • Flyway migration 问题

    Flyway migration 问题本地执行 build 报错 java lang IllegalState Failedtoload atorg springframew test context cache DefaultCache loadContext DefaultCache

    2025年9月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号