FormData实现文件上传

FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单"。从而实现文件的上传

一、FormData对象的构造

1、创建一个FormData空对象,然后通过append()方法添加数据

FormData formData = new FormData();

formData.append("username",username);

formData.append("password",password);

 

2、通过已有的表单来初始化一个对象实例

 

formData里面存储的数据形式,一对key/value组成一条数据,key是唯一的,一个key可能对应多个value。如果是使用表单初始化,每一个表单字段对应一条数据,它们的HTML name属性即为key值,它们value属性对应value值。

 <form id="form" enctype="multipart/form-data" method="post">
        用户名:<input id = "username" type="text" name="username"><br/><br/>
        密码:<input id = "password" type="text" name="password"><br/><br/>
        	<input id = "file" type="file" name="file"><br/><br/>
         	<input type="button" value="提交" id="fileUpload">
 </form>
 //获取页面已有的一个form表单来初始化
 var formData = new FormData($("#form")[0]);
 //获取表单中的字段
 var username = formData.get("username");
 var password = formData.get("password");
 onsole.log("username"+username+",password"+password);
 //在此基础上,添加其他数据
 formData.append("age",100);
 formData.append("sex","man");

二、方法

1、获取值 ---通过get(key)/getAll(key)来获取对应的value,

formData.get("username"); // 获取key为name的第一个值
formData.getAll("username"); // 返回一个数组,获取key为name的所有值

2、添加值---append(key,value);,如果指定的key不存在则会新增一条,如果存在,则会修改对应的value值

formData.append("username",username);
formData.append("password",password);
formData.append("age",100);
formData.append("sex","man");

3、修改值---set(key, value)来修改数据,如果指定的key不存在则会新增一条,如果存在,则会修改对应的value值

formData.append("username", "佛顶山");
formData.set("username", "破壳");
formData.getAll("username"); //破壳

4、删除值---delete(key),来删除数据

formData.append("username", "梵蒂冈");
formData.delete("username");
formData.getAll("username"); //[]

5、判断数据是否存在---has(key)来判断是否对应的key值

formData.append("username1", "佛顶山");
formData.append("username2", "破壳");
formData.has("username1"); //true
formData.has("username2"); //true
formData.has("username3"); //false

三、遍历

规则:

  • 每调用一次next()返回一条数据,数据的顺序由添加的顺序决定

  • 返回的是一个对象,当其done属性为true时,说明已经遍历完所有的数据,这个也可以作为判断的依据

  • 返回的对象的value属性以数组形式存储了一对key/value,数组下标0为key,下标1为value,如果一个key值对应多个value,会变成多对key/value返回

formData.append("username1", "佛顶山");
formData.append("username2", "破壳");
formData.append("username3", "翻滚吧");
formData.append("username4", "凤凰飞天");

var ent = formData.entries();
		
ent.next(); //{done:false, value:["username1", "佛顶山"]}
ent.next(); //{done:false, value:["username2", "破壳"]}
ent.next(); //{done:false, value:["username3", "翻滚吧"]}
ent.next(); //{done:false, value:["username4", "凤凰飞天"]}
ent.next(); //{done:true, value:undefined}

四、上传示例(下载的js代码就是一个ajax请求然后后台处理一下就可以了,这里就省略了)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
</head>
<body>
	<form id="form" enctype="multipart/form-data" method="post">
        上传用户:<input id = "username" type="text" name="username"><br/><br/>
        上传文件:<input id = "file" type="file" name="file"><br/><br/>
         <input type="button" value="提交" id="fileUpload">
     </form>
</body>
	<script type="text/javascript">
	console.log("-------------");
	$("#fileUpload").click(function(){
		//获取上传文件
		var uploadFile = $("#file")[0].files;
		// 用表单来初始化
		var formData = new FormData($("#form")[0]);
		if (uploadFile.length > 0) {
			//获取上传的用户名
			var username = $("#username").val();
			//往formData对象中存值
			console.log("username:"+username+",uploadFile"+uploadFile);
			$.ajax({
				type: 'POST',
				url:"http://localhost:8080/fileUpload/fileUpload",
				data:formData,
				async: true,	// 默认是true,即为异步方式
				cache: false,   //是否在缓存中读取数据的读取。(false 每次读取的是最新的数据)
				contentType: false,	  // 告诉jQuery不要去设置Content-Type请求头
				processData: false,   // 告诉jQuery不要去处理发送的数据
				timeout: 0,	  //async必须设置为async:ture,timeout才生效;(默认的timeout为0,代表永不超时)
				success:function(data){
					alert("上传成功");
				},
				error:function(){
					alert("未知的错误");
				}
			})
		}else {
			alert("选择的文件无效!请重新选择");
		}	
	})
	</script>
</html>

五、上传文件查询

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
</head>
<body>
	<input id="search" type="button" name="search" value="查找">
</body>
	<script type="text/javascript">
	$("#search").click(function(){
		console.log("***************************************");
		$.ajax({
			type: 'POST',
			url:"http://localhost:8080/fileUpload/fileSearch",
			data:{
				'username':'小明',
			},
			async: true,	// 默认是true,即为异步方式
			cache: false,   //是否在缓存中读取数据的读取。(false 每次读取的是最新的数据)
			success:function(data){
				console.log(data);
				alert("查询成功");
			},
			error:function(){
				alert("未知的错误");
			}
		})
	})
	</script>
</html>

这篇文章可以和我的另一篇Java文件上传下载一同使用:https://blog.csdn.net/little__SuperMan/article/details/82897757

formData内容详细链接:https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Node.js使用FormData可以实现文件上传。下面是一个简单的示例代码: 首先,需要引入相关的模块: ``` const http = require('http'); const fs = require('fs'); const FormData = require('form-data'); ``` 然后,创建一个FormData对象,用于存储要上传的文件: ``` const formData = new FormData(); ``` 接下来,可以通过append方法向FormData对象添加要上传的文件: ``` formData.append('file1', fs.createReadStream('path/to/file1.txt')); formData.append('file2', fs.createReadStream('path/to/file2.txt')); ``` 然后,创建一个请求对象: ``` const options = { hostname: 'localhost', port: 8000, path: '/upload', method: 'POST', headers: formData.getHeaders() }; const req = http.request(options, (res) => { // 处理服务器的响应 }); // 将FormData对象写入请求体 formData.pipe(req); req.on('error', (err) => { console.error(err); }); req.end(); ``` 最后,需要在服务器端接收并处理文件上传的请求。可以使用`multer`模块来处理文件上传: ``` const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'uploads/' }); app.post('/upload', upload.array('file', 2), (req, res) => { console.log(req.files); res.status(200).send('File uploaded successfully'); }); app.listen(8000, () => { console.log('Server started on port 8000'); }); ``` 上面的示例代码为使用Express框架,当有文件上传请求时,会将文件保存到`uploads/`目录下,并打印上传的文件信息到控制台。 这就是使用Node.jsFormData实现文件上传的简单示例。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值