vue实现从本地上传头像功能

上传头像: 

<template><div><el-card class="box-card"><div slot="header" class="clearfix"><span>更换头像</span></div><div><!-- 图片、用来展示用户选择的头像 --><img v-if="!avatar" src="../../assets/images/body-bg.jpg" alt="" class="the_img" /><img v-else :src="avatar" alt="" class="the_img" /><!-- 按钮区域 --><div class="btn-box"><input type="file" accept="image/*" style="display:none;" ref="iptRef" @change="onFileChange"><el-button type="primary" icon="el-icon-plus" @click="chooseImg">选择图片</el-button><el-button type="success" icon="el-icon-upload" :disabled="avatar===''" @click="uploadFn">上传头像</el-button></div></div></el-card></div>
</template>

js部分

<script>
import { updateUserAvatarApi } from '@/api'// 导入更新头像的接口
export default {nameL: 'userAvatar',data () {return {avatar: '' // 用来保存图片链接/或者base64字符串地址}},methods: {chooseImg () { // 选择图片-点击事件// 目的:为了让input[type=file]标签,让他再用JS代码来触发它的点击事件(导致它默认行为给一个文件选择窗口)// 原因:input[type=file]它是原生标签,样式不太好改// 解决:移花接木this.$refs.iptRef.click()// 模拟 input[type=file] 的点击行为},onFileChange (e) { // 选择图片确定了const files = e.target.files// 拿到用户选择的文件数组console.log('用户选择的文件数组:', files[0])if (files.length === 0) { // 说明文件选择的窗口打开了,但是它一个文件都没选择就点击了确定关闭了选择弹框} else { // 证明选择了文件(默认只能选择一个文件,如果选择多个,需要给input标签加额外原生属性)console.log('用户选择的文件数组:', files[0])// 目标:选择图片文件,要给到img标签上做纯前端的预览// 知识点:img标签的src值//  只能是图片的链接地址(外链http://开头,或者图片的相对路径)//  或者是图片的base64字符串(而且字符串必须是data:image/png;base64,图片转base64字符串)// 解决方案1:文件 -》 内存临时地址(这个地址只能在js里内存里不能发给后台)// 语法:URL.createObjectURL(文件)// 返回值:内存临时地址// this.avatar = URL.createObjectURL(files[0])// 解决方案2:将文件转成base64(此字符串可以传给后台)// 语法:const fr = new FileReader()fr.readAsDataURL(files[0])// 传入文件对象开始阅读fr.onload = (e) => { // onload等待把文件读成base64字符串后会触发onload事件函数// e.target.result的值就是读完的结果this.avatar = e.target.result// 赋予给变量,让他显示在img的src里}}},uploadFn () { // 开始上传头像updateUserAvatarApi({ avatar: this.avatar }).then(res => {if (res.data.code === 0) {this.$message.success('更新成功!')this.$store.dispatch('upUserInfo')// 调用vuex中的方法,进而更新头像} else {this.$message.error('更新失败!')}})}}
}
</script>

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/807548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四信大中型水库数字孪生调度运营解决方案,开拓管理新模式

今年来&#xff0c;水利部先后印发《关于大力推进智慧水利建设的指导意见》《智慧水利建设顶层设计》《“十四五”智慧水利建设规划》《“十四五”期间推进智慧水利建设实施方案》等系列文件&#xff0c;明确了推进智慧水利建设的主要任务。 《2024年水利工程运行管理工作要点》…

4.11总结

IO流和网络编程 IO流 IO流根据流的类型分为两种&#xff1a; 一种是输入流&#xff0c;另一种是输出流 输入流只能用来读取数据&#xff0c;输出流只能用来写入数据。 IO流存在两种操作文件类型&#xff1a; 字节流和字符流 字符流只能用于纯文本操作&#xff0c;而字节…

SOLIDWORKS特色功能介绍

SOLIDWORKS是一款功能强大的三维CAD设计软件&#xff0c;广泛应用于机械设计、工程分析、产品数据管理和仿真等多个领域。该软件以其用户友好的界面、丰富的功能和性能&#xff0c;赢得了全球数百万工程师和设计人员的青睐。接下来&#xff0c;我们将详细介绍SOLIDWORKS的一些特…

Vue前端框架

1.vue基本使用1 1.vue环境搭建 一般创建vue项目是在cmd命令中用&#xff1a;vue ui 命令&#xff0c;采用ui图形界面的方式直观创建项目。 2.vue基本使用方式&#xff1a;vue组件 3.文本插值 4.属性绑定 5.事件绑定 6.双向绑定 7.条件渲染 2.vue基本使用2 1.axios 安装axios命令…

引领车载影像革命,全链路解决方案助力座舱创新升级

影像技术的创新与突破正在引领各行各业的飞速发展&#xff0c;尤其对于汽车行业来说&#xff0c;车载影像系统已成为衡量车辆智能化水平的重要指标。为了满足这一日益增长的需求&#xff0c;美摄科技凭借深厚的研发实力与创新精神&#xff0c;推出了全链路的车载影像解决方案&a…

uniapp开发小程序,实现堆叠卡片轮播图

一、实现堆叠卡片轮播图: 需求: 实现堆叠轮播图效果堆叠到后面的图片有虚化效果可以在堆叠图片上写文字或叠加图片等效果可以手动滑动&#xff0c;也可以定时自动轮播 二、代码实现&#xff1a; 1.封装一个组件myswiper.vue <!-- 折叠轮播图 组件--> <template>…

如何在SFTP工具中使用固定公网地址远程访问内网Termux系统

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

AD23原理图导入pcb是元器件位置错乱

1、原因是原理图和PCB没有进行连接导致的&#xff0c;可通过以下方法解决&#xff1a; 1>PCB返回到初始的形态&#xff0c;不可出现报错等问题&#xff0c;选择器件连结&#xff1b; 执行快捷键C --> K&#xff0c;将所有匹配组件进行回退&#xff0c;如下图&#xff1…

【Python】类和对象

类和对象 构造方法封装继承多继承 多态 类&#xff1a; 类是一个模板&#xff0c;描述一类对象的行为和状态。 有了模板我们就可以根据这个模板创建具体的对象。 对象&#xff1a; 对象是类的一个具体实例&#xff0c;有状态和行为。 class 类名称: 类的属性类的行为 # 其中 c…

如何在公网环境远程管理内网Windows系统部署的MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

阿里面试总结 一

写了这些还是不够完整&#xff0c;阿里 字节 卷进去加班&#xff01;奥利给 ThreadLocal 线程变量存放在当前线程变量中&#xff0c;线程上下文中&#xff0c;set将变量添加到threadLocals变量中 Thread类中定义了两个ThreadLocalMap类型变量threadLocals、inheritableThrea…

数据知识产权登记前为何需要区块链存证_存储在国外的数据可以做数据资产登记证申请码

各地已公布的管理办法中&#xff0c;均把“数据区块链存证或公证”证明材料做为向各地数据知识产权登记部门提交登记申请表中必要材料之一。北京市数据知识产权登记管理办法要求&#xff1a;有下列情况之一的&#xff0c;不予登记&#xff1a;&#xff08;三&#xff09;登记前…

【SpringBoot】-- mapstruct进行类型转换时Converter实现类不能自动生成代码问题解决

问题描述 我的问题如下&#xff1a; 应该在红色区域生成对应的转换细节&#xff0c;但是这里只返回了一个空对象 问题解决 加入lombok-mapstruct-binding依赖,也要注意依赖引用顺序问题 <dependency><groupId>org.projectlombok</groupId><artifactId&…

uniapp项目引入组件

1、在项目新建文件uni_modules 2、通过uniapp官网查找组件 uni-app官网 3、下载组件 4、将下载好的组件放到步骤1创建的uni_modules目录下 5、在hbuilderX中重新运行小程序

LangFriend - 一款Long-Term Memory 的日历应用

文章目录 学术工作公司为什么要使用日记应用程序&#xff1f;定制总结 本文翻译整理自&#xff1a; https://blog.langchain.dev/langfriend/ (发布于2024 年 3 月 28 日) 在LangChain我们最感兴趣的概念之一就是内存。 每当我们对一个概念感兴趣时&#xff0c;我们都喜欢构建一…

子域名是什么?有什么作用?

在互联网世界中&#xff0c;域名是我们访问网站的关键。每一个公司的网站都需要拥有自己的域名&#xff0c;其中有些大型公司的网站还不止一个域名&#xff0c;除了主域名外还拥有子域名。有些人感到非常困惑&#xff0c;不知道子域名是什么。其实子域名也就是平时所说的二级域…

不可错过的3D建模素材网站,让设计更加丰富多彩!

3D建模已经渗透到了各个行业和领域&#xff0c;从游戏设计、室内设计到建筑设计&#xff0c;3D模型的使用越来越广泛。然而&#xff0c;创建出优秀的3D模型就需要大量的优质3D建模素材。幸运的是&#xff0c;有一些网站提供了大量的高质量3D建模素材&#xff0c;这些都是我们设…

C语言 | Leetcode C语言题解之第20题有效的括号

题目&#xff1a; 题解&#xff1a; char pairs(char a) {if (a }) return {;if (a ]) return [;if (a )) return (;return 0; }bool isValid(char* s) {int n strlen(s);if (n % 2 1) {return false;}int stk[n 1], top 0;for (int i 0; i < n; i) {char ch pair…

AI 对话完善【人工智能】

AI 对话【人工智能】 前言版权开源推荐AI 对话v0版本&#xff1a;基础v1版本&#xff1a;对话数据表tag.jsTagController v2版本&#xff1a;回复中textarea.jsChatController v3版本&#xff1a;流式输出chatLast.jsChatController v4版本&#xff1a;多轮对话QianfanUtilChat…

c++的友元函数,详细笔记,细说三种友元用法

解释友元 友元用通俗易懂的话来说&#xff0c;就是&#xff1a;当有人来到你家里&#xff0c;他就只能呆在客厅里面&#xff0c;你是不可能让他来到你的卧室之中的。但是如果这个人是你的朋友&#xff0c;那么你是默许他可以进入你的卧室的。 此时呢&#xff1f;我告诉你&…