评论

微信小程序头像昵称实战篇

微信小程序头像昵称怎么获取

2022-08-25

api文档地址:  https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html

目前的api变更后,得到的地址为 临时地址, 这个是文档没有说明的, 最佳实践,是需要把得到的地址上传到自己的服务器,然后用服务器返回的地址作为 真实头像的永久地址.



核心点说明:

//获取到api返回的新地址路径
onChooseAvatar(e) {
      this.avatarUrl = e.detail.avatarUrl
      console.log('e.detail', e.detail)
     // this.updateUserInfo();
      this.uploadFile();
    },



/* 上传 头像 转 话格式*/
    uploadFile(){
      uni.uploadFile({
        url: config.webUrl + '/upload/uploadImages',//后台接口
        filePath: this.avatarUrl,// 上传图片 url
        name:'image',
       // formData: this.formData,
        header: {
          'content-type': 'multipart/form-data',
          'token': uni.getStorageSync('token')
        }, // header 值
        success: res => {
          let obj = JSON.parse(res.data)
          console.log('obj', obj)
          if (obj.code == 1) {
           let imgUrl = obj.data.full_path;
           this.userImg = imgUrl;
            this.updateUserInfo();
          } else {
            uni.showToast({
              icon: 'none',
              title: '图片太大,请重新选择!'
            });
          }
        },
        fail: e => {
          this.$toast('上传失败')
        }
      });
    },


这里需要注意, wx.uploadFile 返回的是字符串类型,需要前端自己处理一下数据结构:



完整代码如下:


import config from "@/common/config.js";
import {debounce} from '@/utils/debounce.js'
export default {
  data() {
    return {
      defaultAvatarUrl: 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0',
      avatarUrl: '',
      nick_name: '',
      userImg: '',
    }
  },

  onLoad() {
    let userInfo = uni.getStorageSync('userInfo') || {};
    let { nick_name,img_url } = {...userInfo};
    this.userImg = img_url;
    this.nick_name = nick_name;
  },
  methods: {
    onChooseAvatar(e) {
      this.avatarUrl = e.detail.avatarUrl
      console.log('e.detail', e.detail)
     // this.updateUserInfo();
      this.uploadFile();
    },



    inputWord: debounce(function(e){
      this.nick_name = e.detail.value
      console.log('this.nick_name.length',this.nick_name.length)
      let str = this.nick_name.trim();
      if(str.length==0){
        this.$toast('请输入合法的昵称')
        return
      }
      if((/[^/a-zA-Z0-9\u4E00-\u9FA5]/g).test(str)){
        this.$toast('请输入中英文和数字')
        return
      }
      this.updateUserInfo()
    }, 1500),


    /* 上传 头像 转 话格式*/
    uploadFile(){
      uni.uploadFile({
        url: config.webUrl + '/upload/uploadImages',//后台接口
        filePath: this.avatarUrl,// 上传图片 url
        name:'image',
       // formData: this.formData,
        header: {
          'content-type': 'multipart/form-data',
          'token': uni.getStorageSync('token')
        }, // header 值
        success: res => {
          let obj = JSON.parse(res.data)
          console.log('obj', obj)
          if (obj.code == 1) {
           let imgUrl = obj.data.full_path;
           this.userImg = imgUrl;
            this.updateUserInfo();
          } else {
            uni.showToast({
              icon: 'none',
              title: '图片太大,请重新选择!'
            });
          }
        },
        fail: e => {
          this.$toast('上传失败')
        }
      });
    },



    updateUserInfo(){
      let self = this;
      uni.showLoading({});
      let params = {
        img_url: this.userImg,
        nick_name: this.nick_name.trim(),
      }
      self.$http.post('updateUserInfo', params).then(res => {
        uni.hideLoading()
        if (res.data.code == 1) {
          self.$toast('修改成功!')
        }else {
          self.$toast(res.data.msg)
        }

      })
    },

  }
}




请一键三连,争取升个级,谢谢各位道友!

补充一下,如果api不生效注意切换一下版本库:

我本地用的2.26.1



实际效果图:












最后一次编辑于  2022-11-24  
点赞 12
收藏
评论

16 个评论

  • 阿怪~
    阿怪~
    2022-12-06

    chooseAvatar有个bug,ios唤起后选择从相册中选择图片,不选择图片直接手势返回,无法再唤起头像选择

    2022-12-06
    赞同 2
    回复 2
    • 温文尔雅
      温文尔雅
      2022-12-10
      确实有
      2022-12-10
      回复
    • Siri
      Siri
      2023-01-04
      +1
      2023-01-04
      1
      回复
  • Evildoer
    Evildoer
    2023-02-02

    问题这个临时地址的图片不是最大分辨率的,我怎么能获取到最大分辨率头像呢,分析发现这个方法也是从 https://mmbiz.qpic.cn/*/132 链接获取,然后返回临时地址的 , 我怎么让他从 https://mmbiz.qpic.cn/*/0 这个地址获取呢?

    2023-02-02
    赞同 1
    回复 1
    • 你是人间四月天
      你是人间四月天
      2023-02-03
      你的问题里面就已经说了解决方案了,虽然我们得到的是132的这个,但是我们上传的时候用/0这个地址,是不是就满足你的需求了呢?
      2023-02-03
      回复
  • TSF
    TSF
    2022-11-17

    有个问题,首次提交内存过大的图片时,微信自动校验该图片会直接请求错误,因为头像太大了,又不允许你提前压缩图片,怎么办?

    2022-11-17
    赞同 1
    回复 1
    • 你是人间四月天
      你是人间四月天
      2022-11-17
      方案一: 提前告知用户,只能传1M以内的图片


      方案二: (摆烂)等官方把这个调整发布新公告.之前他们说已经在处理这个问题了.不晓得啥时候更新.
      2022-11-17
      回复
  • 冯良忠
    冯良忠
    2022-11-02

    选择微信昵称,没反应

    2022-11-02
    赞同 1
    回复 2
  • 一束光-
    一束光-
    2023-10-04

    请问可以传到云开发数据库吗?

    2023-10-04
    赞同
    回复 1
    • 你是人间四月天
      你是人间四月天
      2023-10-22
      你拿到地址后,是可以传云数据库的
      2023-10-22
      回复
  •       青柠
          青柠
    2023-08-21

    越来越麻烦了

    2023-08-21
    赞同
    回复 1
  • PIG
    PIG
    2023-04-27

    问一下大佬用这个开发能力 实现微信修改头像那样的裁剪效果要怎么实现

    2023-04-27
    赞同
    回复 1
    • 你是人间四月天
      你是人间四月天
      2023-04-28
      你好! 基于现有的api实现这个功能,我这边也没有什么思路.从用户开始选图片到图片拿到临时地址都是微信那边接管的,自己去裁剪也没得插入的机会.


      说下其他方式: 既然是想修改头像,那么是否可以单独修改这个图片,然后走自己的图片上传那套流程,这样就可以去找一下图片裁剪的操作流程了.
      2023-04-28
      1
      回复
  • 我叫张小咩²⁰²¹
    我叫张小咩²⁰²¹
    2023-04-14

    基础库低于2.21.2的咋整呢?

    2023-04-14
    赞同
    回复 6
    查看更多(1)
  • 陳
    2023-02-23

    你好,我看你写的是输入框的值改变时就调接口,我想写成失去焦点时调接口,是否可行

    2023-02-23
    赞同
    回复 1
    • 你是人间四月天
      你是人间四月天
      2023-02-24
      可行, 监测一下事件就可以了.
      2023-02-24
      回复
  • Siri
    Siri
    2022-12-20

    想问一下,如果这个临时地址,仅仅在小程序侧展示,也同样会遇到用户打开小程序头像突然没了的情况吗?(来自卑微的产品调研)

    2022-12-20
    赞同
    回复 1
    • 你是人间四月天
      你是人间四月天
      2022-12-21
      是的 , 这个零时地址,如这个名字一样,下次进来可能就无效了.所以要弄成自己服务器的.
      2022-12-21
      回复

正在加载...

登录 后发表内容