new FormData()对象的作用以及使用方法(转载)

45 阅读2分钟

引言

我们一般上传使用的是form表单提交,可以把所有表单元素的name与value组成一个queryString,提交到后台。这用jquery的方法来说,就是serialize

// 把表单的值序列化成字符串
let str = $('form').serialize();       
结果:username=lisi&tel=12345678909&password=123456&getPassword=123456
// 把表单的值序列化成数组
let arr = $('form').serializeArray();   
结果:
[{name:'username',value:'lisi'},
 {name:'tel',value:'12345678909'},
 {name:'password',value:'123456'},
 {name:'getPassword'},value:'123456']

但是上述的方式,只能传递一般的参数, 上传文件的文件流是无法被序列化并传递的。所以我们就可以使用到formdata对象,就可以轻松进行文件上传了。

formdata对象

创建formdata对象实例的方式
方式一:

let formdata = new FormData()
console.log(formdata)

方式二:使用已有的表单来初始化一个对象实例

<form action="" method="post" id="myform">
	姓名:<input type="text" name="name" value="zbt">
	密码:<input type="password" name="password" value="123456">
	    <input type="button" value="提交">
</form>
-----------------------------------------------------------------------------
<script>
    let form = document.querySelector('#myform')
    let formdata = new FormData(form)
    let name = formdata.get('name')
    console.log(name);		// zbt
</script>

操作方法
获取值:get(key)/getAll(key)
添加数据:append(key,value) 向 FormData 中添加新的属性值,FormData 对应的属性值存在也不会覆盖原值,而是新增一个值,如果属性不存在则新增一项属性值。

let formdata = new FormData()
formdata.append('name','zbt')
formdata.append('name','hhh')
console.log(formdata.getAll('name'));	// 获取key为name的所有值,是一个数组
console.log(formdata.get('name'));		// 获取key为name的第一个值

修改数据:set(key,value) 如果key不存在会新增一条,如果存在则会修改对应value值

formdata.set('pwd','123456')
console.log(formdata.get('pwd'));	// 123456
formdata.set('pwd','abcdef')
console.log(formdata.get('pwd'));	// abcdef

删除数据:delete(key)
判断是否有该数据:has(key) 如果存在返回true,否则返回false

formdata.set('pwd','abcdef')
console.log(formdata.has('pwd'));	// true
formdata.delete('pwd')
console.log(formdata.has('pwd'));	// false

formdata对象应用

FormData 对象的使用:
1. 用一些键值对来模拟一系列表单控件:即把form中所有表单元素的name与value组装成一个queryString
2. 异步上传二进制文件。

使用formdata对象上传头像

 <input type="file" accept="image/png,image/gif,image/jpeg" @change="update"/>
<input type="file" accept="image/*" @change="upload" capture="camera">
//更换头像
async upload (e) {
  const formdata = new FormData()
  formdata.append('file',e.target.files[0])
  let {data:{data}} = await avator(formdata)		
  this.show = false;
  modifyUser({avatar:data.path})
  this.getUserInfo()
},

原文链接:blog.csdn.net/m0_51328823…