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年水利工程运行管理工作要点》…

【比赛】FAIR1M数据转换为yolov8obb格式

只需要将xml转成txt格式即可。 import xml.etree.ElementTree as ET import os category_set set() category_dict {}def xml2txt(xml_path):# 解析XML文件tree ET.parse(xml_path)root tree.getroot()# 获取width和heightwidth int(root.find(size/width).text)height …

4.11总结

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

机器学习入门项目一(简单线性回归)

使用numpy写一个线性回归算法&#xff0c; 方程&#xff08;模型&#xff09;为 y a x b yaxb yaxb。要求自己设计训练部分并且收敛到满意效果。 以下是数据产生代码&#xff1a; import matplotlib.pyplot as plt import numpy as npclass DataGenerator:""&quo…

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…

头歌-机器学习 第14次实验 主成分分析PCA

第1关:维数灾难与降维 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 相关知识 为了完成本关任务,你需要掌握维数灾难与降维的相关基础知识。 维数灾难 在机器学习中,我们不仅需要学习怎样进行分类、回归或者聚类,我们更要学习怎样对数据进行更好的…

如何在公网环境远程管理内网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…

深度学习八股文

Bert旨在通过联合左侧和右侧的上下文&#xff0c;从未标记文本中预训练出一个深度双向表示模型。因此&#xff0c;BERT可以通过增加一个额外的输出层来进行微调&#xff0c;就可以达到为广泛的任务创建State-of-the-arts 模型的效果&#xff0c;比如QA、语言推理任务。Bert的构…

【ROS2笔记二】使用colcon构建ROS2工作空间

2.使用colcon构建ROS2工作空间 2.1一个构建的示例 在ROS1中&#xff0c;我们使用catkin_make 、catkin_tools、和catkin_make_isolated作为ROS的构建工具&#xff0c;但在ROS2中&#xff0c;我们使用colcon来作为构建工具&#xff0c;具体的原因可以参考该文档A universal bu…

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

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

mashgrid函数到底有啥作用?好处究竟在哪?

在用matlab的时候经常看到mashgrid函数这个函数&#xff0c;但是即使看过很多遍其底层源码&#xff0c;也难以理解他到底好在哪&#xff0c;有啥具体作用。今天终于搞明白了&#xff0c;现在记录一下。 mashgrid函数到底有啥作用&#xff1f;好处究竟在哪&#xff1f; 先说结…

LeetCode-热题100:32. 最长有效括号

题目描述 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 示例 1&#xff1a; 输入&#xff1a; s “(()” 输出&#xff1a; 2 解释&#xff1a; 最长有效括号子串是 “()” 示例 2&#xff1a; 输入&…

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

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