element ui的upload 手动上传头像(复制就能用)

2023-11-05

 

之前在网上看了好多,结果给的代码都不全,整了快一天,才整好,心态都崩了,想砸电脑

这里贴出来愿后来人省力 

下面的代码除了最下面的axios请求需要和自己的匹配之外。其他的可以直接复制使用了

 

服务器接口处理函数

这里只是处理函数,其余的部分没有贴,因为要贴就要贴很多node服务器的代码了

这里有需要提交两个参数,第一个是需要手动上传的base64格式的字符串,第二个时用户的id

这里因为是请求用户信息成功之后了,本地的token存储了用户id,这里默认能检测到,就不需要再手动上传了

// 更新用户头像
exports.updateAvatar = (req,res) => {
    // 通过Id来进行定位更改信息
   const sql = `update ev_users set user_pic=? where id=?`
   db.query(sql,[req.body.avatar,req.user.Id],(err,results) => {
    if(err) return res.cc('更换头像失败')
    if(results.affectedRows !== 1) return res.cc('影响多行')
    res.cc('更换头像成功',0)
   })
}

 vue代码

如果不需要token验证的话,可以把:headers="headers"删掉

标数字的注释下面的代码都是需要和自己的后台接口匹配的

<template>
    <div>
        <el-upload class="avatar-uploader" accept="JPG, .PNG, .JPEG,.jpg, .png, .jpeg" :action="url" list-type="picture"
            :headers="headers" :multiple="false" :show-file-list="false" :http-request="uploadImg">
            <img v-if="imgString" :src="imgString" class="avatar" />
            <i v-else class="el-icon-plus avatar-uploader-icon" size="mini"></i>
        </el-upload>
        <el-button type="primary" size="mini" @click="update_userInfo()">
            确认修改</el-button>
    </div>
</template>

<script>
import axios from 'axios'
//配置axios
//1.axios的默认根地址
axios.defaults.baseURL = 'http://127.0.0.1:3000'
// axios请求拦截
// 为保证其他的页面在每次请求时都确保是登录状态,便需要拦截器在请求之前加入token令牌,来让
// 后台知道此时已经登录
//request为请求,use为回调函数
axios.interceptors.request.use(config => {
    // 为请求头对象,添加 Token 验证的 Authorization 字段
    config.headers.Authorization = window.sessionStorage.getItem('token')
    return config
})
export default {
    data() {
        return {
            // base64 格式字符串
            imgString: "",
            // 2.图片上传路径
            url: "http://127.0.0.1:3000/my/update/avatar",
            // 图片上传头部信息(如果需要token就需要携带头部信息)
            headers: {
                Authorization: window.sessionStorage.getItem("token"),
            },
        };
    },
    methods: {
        // 转换base64方法时Promise对象,必须换成同步
        // 网上还有其它办法,但是尝试过后,这个方法出错的概率最低
        async uploadImg(file) {
            // 这里不一定是file.file,如果使用的方法不一样,有的是file.raw
            // 这里传入的应该是组件中携带的文件信息
            let base64Str = await this.getBase64(file.file);
            this.imgString = base64Str;
        },
        // 获取图片转base64,这里用的是Promise,所以调用方法时必须转换成同步(async,await)
        // 否则上传数据时好时坏,能不能上传成功全看运气 ^_^
        getBase64(file) {
            return new Promise(function (resolve, reject) {
                const reader = new FileReader();
                let imgResult = "";
                reader.readAsDataURL(file);
                reader.onload = function () {
                    imgResult = reader.result;
                };
                reader.onerror = function (error) {
                    reject(error);
                };
                reader.onloadend = function () {
                    resolve(imgResult);
                };
            });
        },
        //3.确认修改之后上传修改信息 axios请求
        async update_userInfo() {
            const { data: res } = await axios.post('/my/update/avatar', { avatar: this.imgString })
            console.log(res);
        }
    },
};
</script>

<style scoped lang="less">
// 头像上传区
.avatar-uploader .el-upload {
    border: 1px dashed #d9d9d9;
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
}

.avatar-uploader .el-upload:hover {
    border-color: #409eff;
}

.avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;
}

.avatar {
    width: 100px;
    height: 100px;
    display: block;
    border-radius: 50%;
    margin: 20px 0 0 20px;
}
</style>

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

element ui的upload 手动上传头像(复制就能用) 的相关文章

随机推荐

  • java提示信息弹出框

    java提示信息弹出框 一 效果展示 A 带 图标 B 带 图标 C 带 图标 D 无图标 E 带 图标 二 java代码 java提示信息弹出框 public static void main String args A 带 图标
  • chatgpt赋能python:在Python中如何打印空格?

    在Python中如何打印空格 如果你是一个Python编程初学者 你可能会想知道如何在Python中打印出空白字符 空格字符是一个非常基本的概念 它是一种用于在字符串中分隔字符和单词的非打印字符 但是 如果你不知道如何在Python中打印空
  • 韩式多用动态图(浪漫情侣)

  • Java集合例题

    输入五位学生的成绩 从小到大排序 求出最高分 最低分 平均分 总分 使用集合 package Example import java util ArrayList import java util Collections import ja
  • 【wazuh】wazuh学习笔记

    1 主动响应 主动响应 执行各种对策来解决威胁 下面是一些执行对策的脚本 var ossec active response bin目录下 1 1 执行策略 1 1 1 禁用用户disable account disable account
  • Log日志级别在SpringBoot中的配置

    在使用Spring Boot进行项目开发的过程中 为了对日志进行更友好的处理 所以需要默认的日志进行自定义的配置工作 关于日志的打印情况 还是先了解一下日志的级别吧 在网上索罗了一下 介绍多种多样 在这儿进行了整理了一下 总的来说日志的打印
  • Shell脚本学习——基本语法阶段一

    Shell脚本学习 基本语法阶段一 一 输入read 1 demo1 2 demo2 二 在 bash 和 sh 中不换行的区别 三 基本运算方法 和C语言基本差不多 四 test语句 1 测试操作符如 2 测试字符串 3 测试整数 五 与
  • 院士、专家倾囊相授!26个免费5G课程发布,点击就可观看!

    冲哇 没有任何力量能阻挡我们学习的脚步 CIC科教网重磅推出的5G科普行免费课程来了 本篇文章 先让我们从CIC科教网说起 中国通信学会科普教育培训平台 即CIC科教网 是中国通信学会致力打造的信息通信领域科普教育服务平台 旨在忠实履行学会
  • opencv人脸识别

    XML文件 opencv自带xml文件位置 Python根目录 Lib site packages cv2 data 各xml文件解释 人脸检测器 默认 haarcascade frontalface default xml Stump b
  • 提升用户体验:Vue与compressor.js实现高效文件压缩

    前言 上传文件是一个常见的需求 并且文件大小往往成为限制因素之一 为了提升用户体验和节省带宽消耗 上传时的文件压缩便显得格外重要 本文将介绍基于 Vue 框架和 compressor js 的上传时文件压缩实现方法 通过在上传过程中对文件进
  • Apollo代码学习(六)—模型预测控制(MPC)

    Apollo代码学习 模型预测控制 前言 模型预测控制 预测模型 线性化 单车模型 滚动优化 反馈矫正 总结 前言 非专业选手 此篇博文内容基于书本和网络资源整理 可能理解的较为狭隘 起点较低 就事论事 如发现有纰漏 请指正 非常感谢 查看
  • 前端路上的旅行

    http www w3cplus com front end trip on road html 什么是前端 什么是前端 大部分指的是Web前端开发 这个词是从网页制作演变过来的 名称上有着很明显的时代特征 在互联网的演化过程中 网页制作是
  • 着色器glsl

    着色器使用glsl的类C语言写成的 着色器开头声明版本 接着是输入和输出变量 uniform和main函数 每个着色器入口点是main函数 在该函数中处理输入变量 将结果存放到输出变量中 着色器结构如下 version version nu
  • 走进开源:认识开源许可

    想要查看前面的笔记请翻阅我的CSDN博客 作者码字不易 喜欢的话点赞 加个关注吧 后期还有很多干货等着你 最近一直在研究开源项目 发现对开源项目的开源许可有一些模糊 现在记录下来算是一个巩固 1 走进开源 开源 一词对应英文 Open So
  • Unity project 发布成Standalone EXE版本后,它的Debug infomation在什么位置

    一 Unity工程发布成Standalone Exe后 它的Debug 信息保存位置如下 二 示例 三 log文件
  • Openwrt开发笔记(3)—— 修改路由的网关地址和无线SSID 密码

    修改网关地址 一般来说默认的网关地址是192 168 1 1 如果我们想要定制自己的网关地址的话 可以选择在刷机后使用web配置页进行修改 或者通过指令进行修改 对于项目开发者而言 在源码中修改更加符合要求 轩面介绍指令修改和源码修改的2中
  • MQTT协议-使用CONNECT报文连接阿里云

    使用网络调试助手发送CONNECT报文连接阿里云 参考 https blog csdn net daniaoxp article details 103039296 在前面文章介绍了如何组装CONNECT报文 以及如何计算剩余长度 CONN
  • anaconda换源和pip换源

    在开发中我们经常会用到第三方的包 但是由于墙的限制导致了下载国外的包 普遍偏慢 这里我们可以修改为国内的镜像源 下载速度自然就会快起来 一 pip换源 国内的镜像源有很多 但是好用的就是阿里和清华的 这里我们选择清华的镜像源 别问为什么 问
  • 全网最强,Python接口自动化测试实战-接口参数关联(购物实例)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • element ui的upload 手动上传头像(复制就能用)

    之前在网上看了好多 结果给的代码都不全 整了快一天 才整好 心态都崩了 想砸电脑 这里贴出来愿后来人省力 下面的代码除了最下面的axios请求需要和自己的匹配之外 其他的可以直接复制使用了 服务器接口处理函数 这里只是处理函数 其余的部分没