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】RDD(Resilient Distributed Dataset)究竟是什么?
目录 基本概念 官方文档 概述 含义 RDD出现的原因 五大属性 以单词统计为例,一张图熟悉RDD当中的五大属性 解构图 RDD弹性 RDD特点 分区 只读 依赖 缓存 checkpoint 基本概念 ...
- nodejs开发准备工作(2)
(1)安装express: (2)安装好express后命令行执行express --version出现express不是内部或外部命令,也不是可运行的程序或批处理文件的问题可能是因为express4 ...
- [hdu4552]最长公共前缀
题意:给一个串s,求s的每个前缀出现次数之和. 思路:对于一个后缀i,设i和原串的最长公共前缀为k,则当前总共可以产生k个答案.因此原题转化为求所有后缀与原串的最长公共前缀之和.模板题.以下为通过模板 ...
- python实现边缘提取
1. 题目描述 安装opencv环境,实现边缘提取 2. 实现过程 1. 安装opencv+python环境 2. 打开图片 3. 将图片二值化 4. 提取边缘 5. 显示图片 3. 运行结果 ...
- Spring Junit--第一个测试
配置成功后,需要启动测试用例! package com.cml.controller; import javax.annotation.Resource; import org.junit.Test; ...
- android关机流程
关机过程的主要实现在ShutdownThread.java中在关机过程中,主要做了三件事:1.发送关机广播 有的模块可能需要监听手机关机事件,所以在关机时发送关机广播,通知相关模块处理.2.关闭一些主 ...
- python-修改文件
1.修改文件1 # fw = open('username','w')# fw.write('hhhh')# fw.flush() #强制把缓冲区里面的数据写到磁盘上1.简单粗暴直接# 1.打开一 ...
- 百度智能云平台调用食物识别api Java实现
纪录一下我小学期2天花了20小时写的菜品识别java程序. 1.2. 百度智能云简介 1.2.1 百度图像识别服务 百度图像识别服务,基于深度学习及大规模图像训练,准确识别图片中的物体类别.位置.置信 ...
- React面试题汇总
1.如何理解React中的组件间数据传递? ①父-子 通过props传递 ②子-父 在父中创建一个可以修改state的方法,之后把这个方法通过props传递给子,在子中调用这个方法 从而达到修改父 ...
- Django模板之模板变量
深度查询句点符(.)在模板语言中有特殊的含义. 当模版系统遇到点("."),它将以这样的顺序查询: 字典查询(Dictionary lookup) 属性或方法查询(Attribut ...