本文介绍如何利用JavaScript的FileReader API将用户选择的图片转换为base64格式,并在前端实现头像的即时预览与上传功能。通过监听input的change事件,读取文件数据并赋值给变量,最终通过axios发送请求完成上传,同时刷新用户信息。
修改用户头像时,通常需要将图片转换为base64格式,因此掌握利用FileReader进行转换的方法至关重要。
页面布局设计
<template>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>更换头像</span>
</div>
<div>
<!-- 图片,用来展示用户选择的头像 -->
<img :src="Avatar" alt="" style="width:350px;" v-if="Avatar"/>
<img src="../../../assets/images/avatar.jpg" alt="" v-else />
<!-- 按钮区域 -->
<div class="btn-box">
<input type="file" style="display:none;" ref="refIpt" @change="onIptChange">
<el-button type="primary" icon="el-icon-plus" @click="chooseImg">选择图片</el-button>
<el-button type="success" icon="el-icon-upload" :disabled="Avatar===''" @click="upLoadAvatar">上传头像</el-button>
</div>
</div>
</el-card>
</template>思路分析如下:
- 1. 点击按钮触发input的点击事件,因此需要给input设置ref以获取DOM元素。
- 2.给input设置change改变事件
- 2.1 定义一个变量用于接收转换后的数据。
- 2.2 获取事件目标,其中e.target.files是一个伪数组。通过判断e.target.files.length可以确定用户是否选择了图片。
- 2.3 通过new FileReader创建实例。
- 2.4 使用实例的readAsDataURL方法将图片转换为base64格式。
- 2.5 利用onload事件监听转换完成的情况,并将结果赋值给声明的变量。
- 3. 点击上传按钮发送axios请求,上传成功后重新请求用户信息以刷新显示。
代码实现
<script>
export default {
name: 'UserAvatar',
data () {
return {
// 声明一个变量存储转好的base64进制
Avatar: ''
}
},
methods: {
// 点击button触发input点击事件
chooseImg () {
this.$refs.refIpt.click()
},
// input内容改变事件
// e拿到事件对象
onIptChange (e) {
// e.target.files是个伪数组/可以通过长度判断用户是否选择了图片
if (e.target.files.length === 0) {
// 点击了取消了,就恢复默认图片
this.Avatar = ''
} else {
// FileReader 浏览器提供的方法
const reader = new FileReader()
// reader里面有个方法readAsDataURL 可以将图片转base64进制
reader.readAsDataURL(e.target.files[0])
// onload可以监听转换完成后
reader.onload = () => {
// 给声明变量赋值
this.Avatar = reader.result
}
}
},
// 点击上传头像
async upLoadAvatar () {
// 发送axios 上传
const { data: res } = await this.$http.patch('/my/update/avatar', { avatar: this.Avatar })
// 判断业务状态码是否上传成功给出提示
if (res.code !== 0) return this.$message.error(res.message)
console.log(res)
this.$message.success(res.message)
// 上传成功发送重新发送axios获取最新用户信息
this.$store.dispatch('initUserInfo')
}
}
}
</script>到此这篇关于js利用FileReader实现图片转base64格式并上传预览头像的文章就介绍到这了,更多相关js FileReader 图片转base64内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!