上传和更改头像

来吧,展示:

 

 上传头像流程图:

 

 流程解析:前端用户登录,点击上传按钮,前端请求后端接口,jwt进行身份验证,验证通过接收文件实体,收到文件实体后要么写入硬盘,要么写入数据库,最后把文件地址返回给前端。

上传头像代码展示:

# 上传头像
class FileUpload(BaseHandler):
    # 做用户鉴权
    @jwt_auth
    async def post(self):

        # 接收文件实体
        file = self.request.files["file"]
        # 上传分类 0上传文件 1上传头像
        upload = self.get_argument('upload',0)

        # 遍历文件
        for meta in file:
            # 获取文件名
            filename = meta["filename"]
            # 写入硬盘
            with open('./static/'+ filename,'wb') as f:
                f.write(meta["body"])

        # 判断数据类型   avtar 数据库图片路径的字段名
        if int(upload) == 1:
            self._cuser.avtar = filename
            # 异步修改
            await self.application.objects.update(self._cuser)

        return self.finish({"errcode":0,"msg":"文件上传成功","filename":filename})

数据库信息:

 前端要写更换的按钮和接收后端传来的url:

更换按钮:

<van-uploader :after-read="afterRead" />

前端:

<template>
  <div>
    <van-image
            round width="10rem" height="10rem" :src="src"/>


                    <van-uploader :after-read="afterRead" />
  </div>
</template>

<script>
export default {
    data() {
    return {
      // 头像地址
      src:"",
      

    }
  },
  methods:{
    // 文件上传
    afterRead(file){

      //单独声明表单
      let data = new FormData();
          //添加数据
          data.append('file',file.file);
          data.append('upload',1);
          data.append("token",localStorage.getItem("token"));
          //声明文件配置
          const axiosconfig = this.axios.create({withCredentials:false});

          //发起请求
          axiosconfig({

            method:"post",
            url:this.baseurl+"upload/",
            data:data

          }).then(data=>{

             console.log(data);
    
                  this.src = this.baseurl+"/static/"+data.data.filename;

                  console.log(this.src);

                  if(data.data.errcode == 0){

                        window.location.reload();

                  }


          });

    },
    
  created(){

      // 判断用户是否登录
      if(localStorage.getItem('token') !=null){
        this.email=localStorage.getItem('email')
      }else{
        this.email='';
      }

      //获取头像
      this.myaxios(this.baseurl+"userinfo/","get").then(data =>{

              console.log(data);

              if(data.cate == 0){

                this.avtar = this.baseurl+"static/"+data.avtar

              }else{
                this.avtar = data.avtar;
              }

              
              localStorage.setItem("cate",data.cate)

        });

  }
    

  },

}
</script>

<style>

</style>

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值