【转】nodejs接收前端formData数据
很多时候需要利用formdata数据格式进行前后端交互。
前端代码可以是如下所示:

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>上传文件</title>
</head> <body>
<form action="uploads1a" id="myform">
<input type="file" name="image" id="file" />
</form>
<div id="test"></div>
<button id="btn">点击上传</button>
<div>
<img src="" id="see">
</div>
<script type="text/javascript">
var btn = document.getElementById("btn");
var file=document.getElementById("file");
var promise=["png","jpg","jpeg","gif","mp3","mp4","svg"]; file.onchange=function(){
var name=file.value;
var ext=name.substring(name.lastIndexOf(".") + 1).toLowerCase();
var res=promise.indexOf(ext);
if (res<0) {
alert("文件格式不正确");
document.getElementById("btn").disabled=true;
}else{
document.getElementById("btn").disabled=false;
}
}
btn.onclick = function() {
var val=document.getElementById("file").value;
if (val.length==0) {
return;
}
var fromData = new FormData(document.forms[0]);
fromData.append("test", "formdata");
fromData.append("test1", JSON.stringify({dd:'dd'}));
var oAjax = new XMLHttpRequest();
oAjax.open('post', "/formdata", true);
//oAjax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //formdata数据请求头需设置
oAjax.send(fromData);
oAjax.onreadystatechange = function() {
if (oAjax.readyState == 4) {
if (oAjax.status >= 200 && oAjax.status < 300 || oAjax.status == 304) {
console.log(oAjax.responseText);
var data=JSON.parse(oAjax.responseText);
document.getElementById("see").setAttribute("src",data.imgSrc.replace(/public/,''));
document.getElementById("file").value="";
} else {
console.log(oAjax.status);
}
}
};
}
</script>
</body> </html>

上面代码不仅有直接生成的formdata数据,还有利用append添加的。
后端应该怎么接收?
接收方案之一是利用nodejs中间件:multiparty,multiparty是nodejs框架express推荐的中间件。
本文在做接收研究时,采用的是express框架,后端代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
var express = require('express');var router = express.Router();var multiparty = require("multiparty");router.get('/', function(req, res, next) { res.render('formdata');});router.post('/', function(req, res, next) { console.log(req.body,"body") //生成multiparty对象,并配置上传目标路径 var form = new multiparty.Form({ uploadDir: './public/images' }); form.parse(req, function(err, fields, files) { console.log(fields, files,' fields2') if (err) { } else { res.json({ imgSrc: files.image[0].path }) } });});module.exports = router; |
注意在使用中间件时候:
前端不要执行这句:
oAjax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //formdata数据请求头需设置
否则multiparty会失效。 后端除了利用这multiparty去接收,还可以原生去接收。原生接收需要设置
oAjax.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //formdata数据请求头需设置
这时候会出现req.body里面,然后去解析,不过貌似有些麻烦。本文也没有处理。
转:https://www.cnblogs.com/zhensg123/p/11078579.html
【转】nodejs接收前端formData数据的更多相关文章
- nodejs接收前端formData数据
转:https://www.cnblogs.com/zhensg123/p/11078579.html 很多时候需要利用formdata数据格式进行前后端交互. 前端代码可以是如下所示: <!D ...
- angularjs和jquery前端发送以http请求formdata数据
formdata是比较常见的前端发送给后端的请求,不仅可以上传数据,而且同时可以上传文件. jquery使用http请求上传formdata数据的方法: var formdata = new Form ...
- nodejs获取post请求发送的formData数据
前端post请求发送formData的类型数据时,需要服务端引入中间件body-parser,主要原因是post请求发送的数据,是在http的body里面,所以需要进行解析,否则获取不到数据(数据为空 ...
- 【转】nodejs获取post请求发送的formData数据
前端post请求发送formData的类型数据时,需要服务端引入中间件body-parser,主要原因是post请求发送的数据,是在http的body里面,所以需要进行解析,否则获取不到数据(数据为空 ...
- SpringMvc接收multipart/form-data 传输的数据 及 PostMan各类数据类型的区别
前段时间遇到一个问题,在spring mvc 服务端接收post请求时,通过html 表单提交的时候,服务端能够接收到参数的值.但是使用httpclient4.3构造post请求,却无法接收到参数的值 ...
- THINKPHP_(7)_THINKPHP6的controller模型接收前端页面通过ajax返回的数据,会因为一个div而失败
这个随笔比较短. 同样的前端页面代码,修改了一下,后端模型接收不到数据. 利用beyond compare软件比对两个前端文件, 发现多了一个</div>标签. 多了一个</div& ...
- php接收json格式数据(text/xml)
在API服务中,目前流行采用json形式来交互. 给前端调用的接口输出Json数据,这个比较简单,只需要组织好数据,用json_encode($array) 转化一下,前端就得到json格式的数据. ...
- [原创作品] Express 4.x 接收表单数据
好久没有写博客,从现在开始,将介绍用nodejs进行web开发的介绍.欢迎加群讨论:164858883. 之前的express版本在接收表单数据时,可以统一用res.params['参数名'],但在4 ...
- nodejs 接收上传的图片
1.nodejs接收上传的图片主要是使用formidable模块,服务器是使用的express搭建. 引入formidable var formidable = require('./node_mod ...
随机推荐
- [#Linux] CentOS 7 配置JDK后,eclipse无法启动,提示jdk路径错误。
解决方案:在eclipse的目录下创建一个jre文件夹,在jre文件夹里创建一个jdk的bin目录的链接 1.进入到eclipse目录下,右键在终端打开. 2.创建jre目录:mkdir j ...
- 使用Wireshark对手机抓包设置说明
一.原因 1.手机目前没有类似的抓包工具可以直接对手机进行抓包 2.一般数据交换的路线是:手机——>运营商——>服务器,可以在手机和运营商中间加一道网卡变成:手机——>PC网卡——& ...
- 如何制作一个Arduino温度数据记录仪
在本项目中,我们将使用Arduino开发板制作一个温度数据记录仪,该设备从温度传感器LM35获取温度值,并从DS3231实时时钟模块获取时间.然后我们将使用mini SD卡模块将这些值存储在SD卡文件 ...
- 安全学习概览——恶意软件分析、web渗透、漏洞利用和挖掘、内网渗透、IoT安全分析、区块链、黑灰产对抗
1 基础知识1.1 网络熟悉常见网络协议:https://www.ietf.org/standards/rfcs/1.2 操作系统1.3 编程2 恶意软件分析2.1 分类2.1.1 木马2.1.2 B ...
- P1281 书的复制[二分]
题目描述 现在要把m本有顺序的书分给k给人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第四本书给同一个人抄写. ...
- webpack中配置babel时遇到的问题
1.Error: Cannot find module '@babel/core' babel-loader@8 requires Babel 7.x (the package '@babel/cor ...
- XSLT可扩展样式表语言转换 System.Xml.Xsl、XslCompiledTransform类
XML文件 books.xml: <?xml version="1.0" encoding="utf-8" ?> <bookstore> ...
- 多线程下,使用new实现单例
import threading class Test(object): from threading import Lock lock = Lock() flag = None def __new_ ...
- win32窗口程序分析
1.分析消息的附加参数 例如:为了查看程序处理了哪些消息 在回调函数中调用输出函数,在控制台中输出消息的值:
- sql server 游标的基本用法
DECLARE @Id NVARCHAR(MAX) DECLARE @UserName NVARCHAR(MAX) DECLARE @Password NVARCHAR(MAX) DECLARE @N ...