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>

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Path Aggregation Network for Instance Segmentation

PANet 摘要1. 引言2.相关工作3.框架 PANet 最初是为 proposal-based 实例分割框架提出来的&#xff0c;mask 是实例的掩码&#xff0c;覆盖了物体包含的所有像素&#xff0c;proposal 在目标检测领域是可能存在目标的区域。在实例分割中&#xff0c;首先利用RPN(Region Proposa…

业务逻辑漏洞(靶场) fiddler

目录 fiddler简介&#xff1a; 业务逻辑漏洞&#xff1a; fiddler下载 靶场&#xff1a; 实验一 ​编辑实验二&#xff08;ps 更改实验url会变&#xff0c;fiddler没抓到东西看看代理改没改&#xff09; 实验三 实验四 fiddler简介&#xff1a; 一款网络抓包工具&#…

基于Java+SpringBoot+Vue养老院管理系统(源码+文档+部署+讲解)

一.系统概述 随着信息时代的来临&#xff0c;过去的传统管理方式缺点逐渐暴露&#xff0c;对过去的传统管理方式的缺点进行分析&#xff0c;采取计算机方式构建养老院管理系统。本文通过课题背景、课题目的及意义相关技术&#xff0c;提出了一种社区活动、活动记录、床位信息、…

what is tty?

waht is tty? 黑话&#xff1a;TTY 为什么使用Linux的时候CtrlC就会终止一个命令运行,ta是如何设置的? stty -a 桌面切换 CTRL ALT F1 – 锁屏 CTRL ALT F2 – 桌面环境 CTRL ALT F3 – TTY3 CTRL ALT F4 – TTY4 CTRL ALT F5 – TTY5 CTRL ALT F6 – TTY6

【Linux】初识Linux,虚拟机安装Linux系统,配置网卡

前言 VMware软件&#xff1a;首先&#xff0c;确保您已经下载了VMware Workstation软件并安装在电脑上。VMware Workstation是一款功能强大的虚拟化软件&#xff0c;它允许在单一物理机上运行多个操作系统。 Linux镜像文件&#xff1a;需要准备一个Linux操作系统的镜像文件。…

AUS GLOBAL(澳洲环球) 与 Gresini Racing MotoGP 达成全球战略合作

国际知名的零售外汇交易平台 AUS GLOBAL 宣布与知名世界摩托车锦标赛 MotoGP 的Gresini Racing车队达成全球战略合作伙伴关系&#xff0c;成为官方赞助商及官方指定线上外汇交易平台。AUS GLOBAL 于 2024 年起与 Gresini Racing MotoGP 车队展开各项合作项目&#xff0c;为 Gre…

密码学与密码安全:理论与实践

title: 密码学与密码安全&#xff1a;理论与实践 date: 2024/4/10 21:22:31 updated: 2024/4/10 21:22:31 tags: 密码学加密算法安全协议密码分析密码安全实际应用未来发展 第一章&#xff1a;密码学基础 1.1 密码学概述 密码学是研究如何保护信息安全的学科&#xff0c;旨在…

InternLM2 技术报告——社区翻译版

InternLM2技术报告于近日正式对外发布&#xff0c;不少社区大佬自发地参与到报告的翻译与解读中来。本文为社区用户翻译的InternLM2技术报告原文&#xff0c;分享给大家~ 论文地址&#xff1a; https://arxiv.org/pdf/2403.17297.pdf 摘要 大型语言模型&#xff08;LLMs&…

uniapp开发Android安卓应用打包配置及使用高德地图配置获取定位失败的问题解决(踩坑)

前言 要获取高德定位,需要使用自定义基座运行(默认基座是dcloud封装好的,自带高德地图配置),但是我们正式发布还是需要使用自己的配置,所以提前配置好防止上线各种bug; 步骤1 首先我们需要登录dcloud开发者中心申请一个Android云端证书,然后需要把证书信息配置到自定义基座中…

【MySQL数据库 | 第二十五篇】深入探讨MVCC底层原理

前言&#xff1a; 在当今互联网时代&#xff0c;数据库扮演着数据存储和管理的关键角色。对于大型Web应用程序和企业级系统而言&#xff0c;高效地处理并发访问和事务管理是至关重要的。多版本并发控制&#xff08;MVCC&#xff09;是一种数据库事务处理的技术&#xff0c;旨…

第十四届蓝桥杯省赛真题-幸运数

代码及解析: #include <iostream> using namespace std;bool check(int x) {int tmpx,len0;while(tmp){len;tmp/10;}//算位数的方法 if(len%21)return 0;//直接retrun 0 int tlen/2;int ans10,ans20;while(t--){ans1x%10;//加每一位x/10; }while(x){ans2x%10;x/10;}if(…

【Keil5-编译4个阶段】

Keil5-编译 ■ GCC编译4个阶段■ 预处理->编译->汇编->链接■ GNU工具链开发流程图■ armcc/armasm&#xff08;编译C和汇编&#xff09;■ armlink &#xff08;链接&#xff09;■ armar &#xff08;打包&#xff09;■ fromelf &#xff08;格式转换器&#xff09…

element UI 设置type=“textarea“ 禁止输入框缩放

背景 在 Element UI 中&#xff0c;当您使用 el-input 组件并设置 type"textarea" 时&#xff0c;默认情况下&#xff0c;用户可以通过拖动输入框的右下角来调整其大小。如果您想禁止这种缩放行为&#xff0c;需要使用 CSS 来覆盖默认的浏览器行为。 注意上图&#x…

3.Burp Suite 入门篇 —— 修改请求

目录 前言 官网注册 Burp 浏览器访问漏洞页面 登陆购物网站账号 修改请求包 漏洞挖掘 前言 本篇文章会教你如何用 Burp Proxy 修改截获的请求。 修改请求包是为了通过网站程序规定之外的方式请求&#xff0c;然后对比查看响应内容的变化&#xff0c;判断是否有漏洞存在…

Docker部署minio集群

1.基本定义 由于是非常轻量级的软件&#xff0c;所以架构上也没有这么复杂&#xff0c;他使用操作系统的文件系统作为存储介质&#xff0c;我们在向任意节点写数据的时候&#xff0c;minio会自动同步数据到另外的节点&#xff0c;而机制叫做erasure code&#xff08;纠删码&am…

深度学习环境搭建问题汇总

pip无法通过国内源下载&#xff0c;could not find a version that satisfies the requirement 当遇见could not find a version that satisfies the requirement问题时&#xff0c;可以通过下载whl的方式进行离线安装&#xff0c;以torch1.12.0为例&#xff0c;如果用的是阿里…

苹果电脑怎么彻底删除软件 苹果电脑卸载软件在哪里 cleanmymac x怎么卸载 mac废纸篓怎么删除

苹果电脑卸载软件的方法相对直观和简单&#xff0c;尤其是对于习惯使用Mac操作系统的用户来说。以苹果MacBook Pro为例&#xff0c;以下是卸载软件的详细步骤、使用方法、注意事项与建议。 一、卸载软件的详细步骤&#xff1a; 1. 打开Mac电脑&#xff0c;进入桌面&#xff0c…

shardingSphere5.1.1 适配人大金仓

shardingSphere5.1.1 适配人大金仓 编译后的jar文件和源码下载 1. 官网适配数据库说明 图例可见&#xff0c;官网不支持人大金仓国产数据库&#xff0c;若要使用shardingSphere需要修改源码2. 需要修改的类 2.1 KingBase8DatabaseType.java package org.apache.shardingsphe…

Python | 超前滞后分析

Nino SST Indices (Nino 12, 3, 3.4, 4; ONI and TNI) 有几个指标用于监测热带太平洋&#xff0c;所有这些指标都是基于海表温度(SST)异常在一个给定的区域的平均值。通常&#xff0c;异常是相对于30年的周期来计算的。厄尔尼诺3.4指数(Nio 3.4 index)和海洋厄尔尼诺指数(Ocea…