WebAPI之FormData
- MDNformdata参考——https://developer.mozilla.org/zh-CN/docs/Web/API/FormData
- MDNformdata参考——https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects
FormData API
- 构造函数:
FormData FormData.prototype.append()FormData.prototype.get()FormData.prototype.getAll()FormData.prototype.set()FormData.prototype.has()FormData.prototype.delete()FormData.prototype.entries()FormData.prototype.keys()FormData.prototype.values()
创建formdata对象
从零开始创建
var icon_file = document.getElementById('my_icon');
var fd = new FormData();
// 添加一些数据
fd.append('en_name', 'Pelli');
fd.append('cn_name', '沛笠');
fd.append('age', 18);
fd.append('bug', 'new Error()');
// 添加我的头像文件
// fd.append('my_icon', icon_file.files[0]);
// 获取中文名
var en_name = fd.get('en_name');// "Pelli"
// 获取英文名
var cn_name = fd.get('cn_name');// "沛笠"
// 获取年龄
var age = fd.get('age');// "18"
// 重新设置年龄, 越变越年轻
fd.set('age', 16);
fd.get('age');// "16"
// 新增一个英文名:Jack,我的Rose在哪里?
fd.append('en_name', 'Jack');
// 获取所有的英文名
fd.getAll('en_name');// ["Pelli", "Jack"]
// 把bug删除掉
fd.delete('bug');
// 获取所有的key
var fd_keys = fd.keys();
// 获取所有的value
var fd_vals = fd.values();
// 获取所有的键值
var fd_keys_vals = fd.entries();
// 遍历keys
for(var key of fd_keys){
console.log(key);
}
// 遍历values
for(var val of fd_vals){
console.log(val);
}
// 遍历所有的键值
for(var keyval of fd_keys_vals){
console.log(keyval[0], keyval[1]);
}
使用表单创建formdata数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Formdata</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" name="fileinfo">
<label>邮箱地址:</label>
<input type="email" autocomplete="on" autofocus name="userid" placeholder="email" required size="32" maxlength="64" /><br />
<label>说明:</label>
<input type="text" name="filelabel" size="12" maxlength="32" /><br />
<label>附件:</label>
<input type="file" name="file" required />
<input type="submit" value="提交!" />
</form>
<script type="text/javascript">
var formElement = document.querySelector("form");
var f_data = new FormData(formElement);
// 新增一些自定义数据
f_data.append('my_name', 'Pelli');
var f_ents = f_data.entries();
// 遍历数据
for(for ents of f_ents){
console.log(ents[0], ents[1]);
}
</script>
</body>
</html>
使用formdata上传文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Formdata</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" name="fileinfo">
<label>邮箱地址:</label>
<input type="email" autocomplete="on" autofocus name="userid" placeholder="email" required size="32" maxlength="64" /><br />
<label>说明:</label>
<input type="text" name="filelabel" size="12" maxlength="32" /><br />
<label>附件:</label>
<input type="file" name="file" required />
<input type="submit" value="提交!" />
</form>
<script type="text/javascript">
var form = document.forms.namedItem("fileinfo");
form.addEventListener('submit', function(ev) {
var oOutput = document.querySelector("div"),
oData = new FormData(form);
oData.append("custom", "自定义数据");
// 发起ajax
var oReq = new XMLHttpRequest();
// 在跨域的时候,如果用到了cookie或者session,需要设置该参数
// 服务器端也需要设置相应的:Access-Control-Allow-Credentials: true
oReq.withCredentials = true;
oReq.open("POST", "stash.php", true);
oReq.onload = function(oEvent) {
if (oReq.status == 200) {
oOutput.innerHTML = "上传成功!";
} else {
oOutput.innerHTML = "Error " + oReq.status + " occurred when trying to upload your file.<br \/>";
}
};
oReq.send(oData);
// 劫持form的默认事件,使用ajax发送数据
ev.preventDefault();
}, false);
</script>
</body>
</html>
使用jQuery上传formdata数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Formdata</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" name="fileinfo">
<label>邮箱地址:</label>
<input type="email" autocomplete="on" autofocus name="userid" placeholder="email" required size="32" maxlength="64" /><br />
<label>说明:</label>
<input type="text" name="filelabel" size="12" maxlength="32" /><br />
<label>附件:</label>
<input type="file" name="file" required />
<input type="submit" value="提交!" />
</form>
<script type="text/javascript">
var fd = new FormData(document.querySelector("form"));
fd.append("CustomField", "This is some extra data");
// 也可添加blob数据
// fd.append("myfile", myBlob, "filename.txt");
$.ajax({
url: "stash.php",
type: "POST",
data: fd,
processData: false, // 不处理数据
contentType: false, // 不设置内容类型
xhrFields: {// 如果有跨域,并且需要使用session时,需要加上该参数
withCredentials: true
},
success: function(data){
// 成功的回调函数
},
error: function(data){
// 出错的回调函数
}
});
</script>
</body>
</html>
微信公众号:撩码

WebAPI之FormData的更多相关文章
- 编码为multipart/form-data自定义类型(包括文件)如何自动绑定到webapi的action的参数里
application/x-www-form-urlencoded与 multipart/form-data: Fom表单中如果没有type=file的控件,用默认的application/x-www ...
- WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)
简单的Demo,用于了解WebAPI如何同时接收文件及数据,同时提供HttpClient模拟如何同时上传文件和数据的Demo,下面是HttpClient上传的Demo界面 1.HttpClient部分 ...
- WebApi FormData+文件长传 异步+同步实现
// POST api/values public async Task Post() { try { // 检查该请求是否含有multipart/form-data if (!Request.Con ...
- WebApi实现Ajax模拟Multipart/form-data方式多文件上传
前端页面代码: <input type="file" class="file_control" /><br /> <input t ...
- WebApi系列~StringContent与FormUrlEncodedContent
回到目录 知识点 本文是一个很另类的文章,在项目中用的比较少,但如果项目中真的出现了这种情况,我们也需要知道如何去解决,对于知识点StringContent和FormUrlEncodedContent ...
- ASP.NET WebAPi(selfhost)之文件同步或异步上传
前言 前面我们讲过利用AngularJs上传到WebAPi中进行处理,同时我们在MVC系列中讲过文件上传,本文结合MVC+WebAPi来进行文件的同步或者异步上传,顺便回顾下css和js,MVC作为客 ...
- 如何使 WebAPI 自动生成漂亮又实用在线API文档
1.前言 1.1 SwaggerUI SwaggerUI 是一个简单的Restful API 测试和文档工具.简单.漂亮.易用(官方demo).通过读取JSON 配置显示API. 项目本身仅仅也只依赖 ...
- Enable Cross-Origin Requests in Asp.Net WebApi 2[Reprint]
Browser security prevents a web page from making AJAX requests to another domain. This restriction i ...
- webApi上传下载文件
上传文件通过webApi html端调用时包含(form提交包含 enctype="multipart/form-data",才可以启作用获取到文件) public class U ...
随机推荐
- spark-2.4.5 安装记录
参考 https://data-flair.training/blogs/install-apache-spark-multi-node-cluster/ 下载 spark 地址为 http://sp ...
- [ACdream 1215 Get Out!]判断点在封闭图形内, SPFA判负环
大致题意:在二维平面上,给一些圆形岛屿的坐标和半径,以及圆形船的位置和半径,问能否划到无穷远的地方去 思路:考虑任意两点,如果a和b之间船不能通过,则连一条边,则问题转化为判断点是否在多边形中.先进行 ...
- [hdu1847]博弈,推理
题意:一堆石子,有n个,两个人轮流取,每次都只能取2的幂次方个数,不能取的人输 思路:首先0是必败态,2的所有幂次都是必胜态.由于选的数模3只能是1或2,恰好又都是2的幂次,0,.3都为必败态,猜想3 ...
- 【clear linux】intel clear linux 电源状态命令
# 重启系统 $ sudo systemctl reboot # 关闭系统,切断电源 $ sudo systemctl poweroff # CPU停止工作 $ sudo systemctl halt ...
- layui编辑商品时,怎么使用下拉菜单显示商品默认分类的问题
//加载商品默认的分类$.get('/admin/category/selec/' + {$simple.0.first_pid},function(msg){ $("#two_cate&q ...
- Spring Junit--第一个测试
配置成功后,需要启动测试用例! package com.cml.controller; import javax.annotation.Resource; import org.junit.Test; ...
- FF按钮点击后表单提交
如果发现<button>提交</button>点击后,所在的表单在ff中自动提交了,则需要添加属性 type='button'! 我也是百度的,记在这里以后方便查看!
- 10大Web漏洞扫描工具
Web scan tool 推荐10大Web漏洞扫描程序 Nikto 这是一个开源的Web服务器扫描程序,它可以对Web服务器的多种项目(包括3500个潜在的危险文件/CGI,以及超过900个服务器版 ...
- 【雕爷学编程】MicroPython动手做(04)——零基础学MaixPy之尝试运行
1.hello micropython #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之一:hello micropython #MicroPython动手做(04) ...
- python之Python VS Code下载和安装教程
Visual Studio Code,简称 VS Code,是由微软公司开发的 IDE 工具.与微软其他 IDE(如 Visual Studio)不同的是,Visual Studio Code 是跨平 ...