700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > FormData实现文件上传

FormData实现文件上传

时间:2020-05-11 16:06:58

相关推荐

FormData实现文件上传

应用场景:

FormData+Ajax技术实现文件上传

1.FormData使用

FormData是一个构造函数,首先new FormData(),得到一个FormData对象

可以直接使用,直接console会是一个空白的对象,有append方法,delete,get,.......

append(键,值)可以向空白的FormData中追加键值对的数据,

键 数据项的名字,必须是字符串 ; 值 数据项的值,可以是任意类型的数据

直接追加三个数据,但是此时输出fd里是看不到的,不像普通的对象形式。想看到数据,只能get.age,就能看到值,即get.键=值。

const fd=new FormData()console.log(fd) ​fd.append('username','zs')fd.append('age',20)fd.append('accd',1312)​console.log(fd) //空的console.log(fd.get('age')) //20

2.FormData实现文件上传

选择图片文件

把用户选择的文件存入FormData对象(也能实现form表单序列化,

使用axios把FormData对象发送给服务器

模拟文件选择器的点击事件

过程:

input里的type属性是file,就是文件选择。

然后先获取这个输入框,然后就使用FormData,先new,再append,名字,年龄,然后存储文件数据,文本域有change事件。当选择的文件发送了改变,就会触发change事件,所以这里添加一个change事件。

给input添加change事件,只要选择文件就会被改变就会触发事件,即使是第一次选择文件也会触发。

如何获取选择的文件呢?FormData存文件

此时输出this,this指的是当前的文件域,会输出当前的input,打印详细信息,console.dir,就能看到里面的很多属性,有一个属性files

文件域有files属性,里面存着用户选择的文件,files[0] 就是file文件

然后把这个东西append给formdata对象

<input type="file" id="iptfile"></body><script>let iptfile=document.querySelector("#iptfile")let fd=new FormData()​fd.append('username','zs')fd.append('age',23)​//文本域的change事件iptfile.addEventListener('change',function(){console.log('change触发') //选择一次触发一次console.log(this.files[0]) //存的是当前选择的图片​fd.append('imgobj',this.files[0])fd.forEach((value,key)=>{console.log(value,key)})​})

案例-头像上传

文件上传:

1.点击按钮,弹出文件选择框----模拟点击文件的选择器,实现弹框选择文件

通过代码点击文本域,iptfile.cilck,点击上传图片的按钮,反而执行的是选择文件input的click事件

2.实现文件上传

文件上传必须是post,使用formdata,给input添加change事件,[0]是undefined表示用户没有选择文件,所以!0表示上传了文件,return 就阻止后面代码执行,先new formdata,然后append,把图片给对象,然后使用axios发送,data就是dormdata对象

会返回一个url,然后改变路径,把返回的路径和服务器路径结合,就变成了图片的新路径

此时改变文件,网页里的图片也会跟着变化

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。