#用FileReader的方式上传头像
作为一个可以登录的网站,上传头像的功能是必要的,今天自己使用了FileReader(异步读取文件)的方式进行实现,来记录一下实现的过程与一下问题。
首先是HTML部分的代码
`
<div class="profilePicture">
<input type="file"class="file" id="fileImg"></input>
<label for="fileImg" @click="upImg()">上传</label>
</div> `
这里使用label-for的方式在头像上传的旁边绑定一个说明字样'上传',来引导用户点击上传来执行代码.input:[type:'file']可以选择文件进行上传。
然后是vue中的JS代码,每一步的功能用注释进行了说明
` upImg(e){
let input = document.getElementById('fileImg')
//当选择了图片文件或文件发生改变时出发'fileImg'的onchange事件函数。
input.οnchange=(e)=>{
//获取选取的图片,详细见说明1
let fileObj = e.target.files[0];
//让web应用异步读取计算机本地的文件
let reader = new FileReader()
//当文件加载完毕执行一下代码
reader.onload = ()=>{
//返回并保存读取到的图片文件内容,
//注意result属性只能用于文件加载完之后,所以要放在onload事件里
var imgurl = reader.result
console.log(reader.result)
//更改图片的链接,将选择并加载好的图片呈现在界面上
document.getElementById('img').src = imgurl;
//保存图片到data中,用于之后向后台提交并保存至数据库
this.img_url=imgurl;
}
//再次读取文件并将它变成一个包含data的url字符串,便于向后端发送
reader.readAsDataURL(fileObj)
}`
说明1:获取到的参数e是只这个表单的一切参数和属性。target属性用于获取触发该事件的节点,e.target返回的是input这个对象。e.target.file是获取到的一串文件,e.target.file[0]是被选中的第一个文件,如果这个图片文件有参数,也可以用点语法进行获取。
注意,由于这个函数中还嵌套了函数,所以保存数据到data的这一步如果用常规的function写法写这两个函数,this会因找不到指向目标而指向顶部,导致在发送数据时取不到图片的url链接,这时我们将函数的写法改为箭头函数,固定this的指向就能解决这个问题。
相关文章
- 01-03用Window Authentication的方式去连接SQLServer
- 01-03SpringMVC上传文件的三种方式(转帖)
- 01-03IOS开发基础之单文件上传基础最原始的方式
- 01-03顺便分享一下用WPF设计自定义tree控件树.一些增删改查节点的方式
- 01-03appium用例等待的三种方式
- 01-03C语言用线程的方式实现cp函数--mycopy
- 01-03实例化(用new的方式)创建一个对象的顺序
- 01-03【解决方案】视频监控中教培机构如何通过将闲时设备录像转存入云的方式用有限带宽承载无限需求?
- 01-03第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传
- 01-03SpringMVC中处理文件上传的两种方式