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

 

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

这里贴出来愿后来人省力 

下面的代码除了最下面的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>

 

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element Plus 是一套基于 Vue.js 的桌面端组件库,其中包含了丰富的组件,包括上组件。Element Plus 的上组件可以实现文件的手动上。 要使用 Element Plus 的上组件,首先需要在项目中引入 Element Plus 的库文件。然后,在需要使用上组件的地方,可以使用 `<el-upload>` 标签来创建一个上组件的实例。 在手动上的情况下,可以通过设置 `action` 属性来指定上文件的接口地址。同时,还可以通过设置 `before-upload` 属性来定义在上之前的一些操作,比如校验文件类型、大小等。在上成功或失败后,可以通过设置 `on-success` 和 `on-error` 属性来处理上成功和失败的回调函数。 以下是一个示例代码,展示了如何使用 Element Plus 的上组件进行手动上: ```html <template> <el-upload action="/upload" :before-upload="beforeUpload" :on-success="handleSuccess" :on-error="handleError" > <el-button size="small" type="primary">点击上</el-button> </el-upload> </template> <script> export default { methods: { beforeUpload(file) { // 在这里可以进行文件校验操作 console.log('before upload:', file); return true; // 返回 true 表示继续上,返回 false 表示取消上 }, handleSuccess(response, file) { // 上成功的回调函数 console.log('upload success:', response, file); }, handleError(error, file) { // 上失败的回调函数 console.log('upload error:', error, file); } } } </script> ``` 在上面的示例中,`action` 属性指定了上文件的接口地址为 `/upload`,`before-upload` 方法用于文件校验,`handleSuccess` 和 `handleError` 方法分别处理上成功和失败的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值