微信小程序上传头像和昵称持久化保存

这篇具有很好参考价值的文章主要介绍了微信小程序上传头像和昵称持久化保存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信小程序上传头像和昵称持久化保存

1. 持久化步骤

因为通过微信头像昵称填写功能获取到头像是一个临时头像,这个url只能一段时间内在微信访问,并且无法在公网访问这个url。所以非常有必要把这个url转成我么实际可用的头像到数据库中。让头像持久化的在微信和公网任何位置都能访问。

这里我们使用url转base64字符串的方式,持久化图片成base64字符串。如果是自己上传图片还需要考虑图片大小和压缩图片的问题,这里我们直接采用微信的头像上传接口,直接帮我们快捷压缩和裁剪图片,灰常的好用。话不多说,来看代码

2. 页面效果

java保存微信头像,小程序,微信小程序,小程序,javascript,小程序头像持久化保存,小程序头像永久保存
java保存微信头像,小程序,微信小程序,小程序,javascript,小程序头像持久化保存,小程序头像永久保存
java保存微信头像,小程序,微信小程序,小程序,javascript,小程序头像持久化保存,小程序头像永久保存

3. 代码实现

1. uniapp小程序

安装image-tools

npm i image-tools --save

2. 原生小程序

新建一个util工具类js。加上一个function文章来源地址https://www.toymoban.com/news/detail-523883.html

/**
 * 图片url链接转base64
 * @param {String} url 图片链接
 * @returns 转base64后的值或者报错信息
 */
const imgUrlToBase64 = (url) => {
  return new Promise((resolve, reject) => {
    if (!url) {
      reject('请传入url内容');
    }

    if (/\.(png|jpe?g|gif|svg)(\?.*)?$/.test(url)) {
      // 图片地址
      const image = new Image();
      // 设置跨域问题
      image.setAttribute('crossOrigin', 'anonymous');
      // 图片地址
      image.src = url;
      image.onload = () => {
        const canvas = document.createElement('canvas');
        const ctx = canvas.getContext('2d');
        canvas.width = image.width;
        canvas.height = image.height;
        ctx.drawImage(image, 0, 0, image.width, image.height);
        // 获取图片后缀
        const ext = url.substring(url.lastIndexOf('.') + 1).toLowerCase();
        // 转base64
        const dataUrl = canvas.toDataURL(`image/${ext}`);
        resolve(dataUrl || '');
      }
    } else {
      // 非图片地址
      reject('非(png/jpe?g/gif/svg等)图片地址');
    }
  });
};

2. 页面使用

1. 完善用户信息(昵称头像)弹窗
 <u-modal v-model="showAuthorizeUser" :show-title="false"
               :show-confirm-button="false">
        <view class="slot-content">
          <div class="auth-card">
            <div class="img">
              <img class="avatar-img"
                   :src="userInfoTemp.avatarurl"
                   v-if="userInfoTemp.avatarurl&& userInfoTemp.avatarurl!=''"
                   mode="widthFix">
              <img class="avatar-img"
                   v-else
                   src="/static/logo-min.png"
                   mode="widthFix">
            </div>
            <div class="title">{{bname}}</div>
            <div class="content">邀请您补全个人信息<br></br>(昵称、头像)</div>
            <div style="margin-left: 100rpx;margin-right: 100rpx">
              <u-form ref="uForm">
                <u-form-item label="头像">
                  <button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar" slot="right">
                    <image class="avatar"
                           :src="userInfoTemp.avatarurl"
                           v-if="userInfoTemp.avatarurl&& userInfoTemp.avatarurl!=''"></image>
                    <image class="avatar"
                           v-else
                           src="/static/logo-min.png"></image>
                  </button>
                </u-form-item>
                <u-form-item label="昵称">
                  <input type="nickname" class="weui-input" @blur="userNameInput" placeholder="请输入昵称"/>
                </u-form-item>
              </u-form>
            </div>
          </div>
          <div class="auth-btncard">
            <div class="btn-unok"><u-button :hair-line='false' :custom-style="customStyleUnOk" @click="showAuthorizeUser=false"> 拒绝</u-button></div>
            <div class="btn-ok"><u-button :hair-line='false' :custom-style="customStyleOk" @click="authUser"> 允许</u-button></div>
          </div>
        </view>
   </u-modal>
2. js部分
<script>
        import { pathToBase64, base64ToPath } from 'image-tools'
        //如果是原生小程序这里就import我们写的那个function。图片url转base64的
        export default {
            data() {
                return {
                    userInfoTemp:{
                        id:'',
                        name:'',
                        avatarurl:''
                    },
                customStyleUnOk: {
                    marginTop: '20rpx', // 注意驼峰命名,并且值必须用引号包括,因为这是对象
                    border:'none',
                    color:'gray'
                },
                customStyleOk: {
                    marginTop: '20rpx', // 注意驼峰命名,并且值必须用引号包括,因为这是对象
                    border:'none',
                    color:'#157DFB'
                },
                // 用户基本信息
                userInfo: null,
                // 是否弹出登录注册授权弹窗
                showAuthorizeUser: false,
        }
    },
    methods: {
      openUserSet(){
        this.userInfoTemp.id = this.userInfo.id;
        this.userInfoTemp.name = this.userInfo.name;
        this.userInfoTemp.avatarurl = this.userInfo.avatarurl;
        console.log(this.userInfoTemp)
        this.showAuthorizeUser = true;
      },
      authUser(){
        if(this.userInfoTemp.name && this.userInfoTemp.name!=''){
          if(this.userInfoTemp.avatarurl && this.userInfoTemp.avatarurl!=''){
            this.showAuthorizeUser = false;
            this.$api.saveUserInfo(this.userInfoTemp, res => {
              this.userInfo.name = this.userInfoTemp.name;
              this.userInfo.avatarurl = this.userInfoTemp.avatarurl;
              uni.setStorageSync('userInfo',this.userInfo)
              this.$interactive.toast('保存成功!')
              this.showAuthorizeUser = false;
            })
          }else{
            this.$interactive.toast('头像不能为空!')
          }
        }else{
          this.$interactive.toast('昵称不能为空!')
        }

      },
      //获取昵称输入内容
      userNameInput(e){
        this.userInfoTemp.name = e.detail.value
      },
      onChooseAvatar(e) {
        pathToBase64( e.detail.avatarUrl).then(path => {
          this.userInfoTemp.avatarurl = path
        }).catch(error => {
          console.log(error)
        })
      }
    }
}
</script>
        
3. css部分
.auth-card{
    text-align: center;
    .avatar-img{
        width: 150rpx;
        height: 150rpx;
        overflow: hidden;
        border-radius: 100%;
        margin-top: 30rpx;
    }
    .title{
        font-size: 20rpx;
    }
    .content{
        margin-top: 10rpx;
    }
}
.avatar-wrapper{
    width: 150rpx;
    height: 100rpx;
    color: #333 !important;
    text-align: center !important;
    border: none !important;
    border-radius:0 !important;
    background-color:transparent !important;
}
.avatar-wrapper::after {
	border: none !important;
}
.auth-btncard{
    .btn-unok{
        width: 50%;
        float: left;
    }
    .btn-ok{
        width: 50%;
        float: left;
        margin: 0;
        padding: 0;
        border: 0px solid transparent;  //自定义边框
        outline: none;    //消除默认点击蓝色边框效果
        u-button{
            margin: 0;
            padding: 0;
            border: 0px solid transparent;  //自定义边框
            outline: none;    //消除默认点击蓝色边框效果
        }
    }
}

到了这里,关于微信小程序上传头像和昵称持久化保存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最新微信小程序获取头像昵称,直接用,uniapp获取微信小程序头像昵称

    微信小程序获取用户头像和昵称一个开放接口是wx.getUserInfo,2021年4月5日被废弃,原因是很多开发者在打开小程序时就通过组件方式唤起getUserInfo弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户,后面新

    2024年02月11日
    浏览(54)
  • 修复微信小程序不能获取头像和昵称的bug,微信小程序新版头像昵称API使用

    大厂程序员都是有KPI绩效考核的,所以他们不能闲着,每天要想着怎么优化程序代码、怎么满足奇葩用户的需求,所以苦逼了我们这些小公司程序员,微信一个小小的API接口改动,可能就让一个小公司因此损失惨重,甚至直接面临倒闭。鹅厂可不管你这些小公司的死活,毕竟

    2024年02月11日
    浏览(94)
  • 微信小程序获取昵称,头像

    1,昵称:使用到的是微信小程序文档里的api input框的type值设置为nickname,再使用双向绑定的方法拿到值 这个方法点击input框的时候它会弹出你当前的微信名称,基础库版本较低的话电脑上无法显示,只能在真机调试上显示 2,头像 点击按钮底部弹出自己的头像,也可以上传新

    2024年02月12日
    浏览(53)
  • 微信小程序更改头像昵称

    目录 背景 解决思路 前面写了一篇关于小程序头像昵称获取更改的方案,有很多小伙伴私信我发一个整体的逻辑思路! 前面的这篇文章中我们给出了页面中获取头像昵称的代码: 上方代码中我们可以很清晰的看到用户的头像和昵称,使用button和input输入框来填充或者更改的。

    2024年02月09日
    浏览(44)
  • 微信小程序获取用户头像昵称

    微信小程序是一种基于微信开发平台的轻应用,用户可以通过微信扫码、搜索等方式进入小程序并使用。在小程序中,获取用户昵称和头像是非常常见的需求,因为这些信息可以用来个性化展示内容,提高用户体验。以下是获取用户头像昵称的传统方法: 在小程序中,可以通

    2024年02月07日
    浏览(64)
  • 微信小程序最新获取头像昵称方式

      前言 版本历史变迁 一、获取头像的正确姿势 二、获取昵称的正确姿势 总结 产品需要获取微信用户的昵称和头像。 这这还不简单,so easy! 通过 wx.getUserProfile 或者  wx.getUserInfo  就可以获取到。 但是获取的昵称是”微信用户“获取的头像是灰色的头像。 如果你也是上面这

    2024年02月13日
    浏览(46)
  • 微信小程序如何获取用户头像昵称

        微信小程序登录用户头像昵称已经不支持支持获取,因为用户的scope.userInfo权限已经回收,可以使用昵称头像填写进行完善用户信息,按照官方推荐会显示用户在微信的头像和昵称,本文介绍一下实现方案.最终实现效果:修改头像会默认显示微信头像,修改昵称时会默认显示

    2024年02月11日
    浏览(72)
  • 关于微信小程序用户头像昵称获取规则调整后的头像昵称获取方式

    小程序用户头像昵称获取规则调整公告:小程序用户头像昵称获取规则调整公告 | 微信开放社区   点击登录按钮,先去检查用户授权信息,会弹出用户授权弹窗(首次),用户点击同意授权之后,调用 wx.login 方法获取登录凭证(code),把code传给后端写的登录接口进行解析登

    2024年02月05日
    浏览(64)
  • 微信小程序获取头像昵称 保存头像到服务器

    微信官方推荐的替代做法: 头像昵称填写 | 微信开放文档 (qq.com)  wxml js wxss

    2024年02月16日
    浏览(51)
  • 关于微信小程序获取头像和昵称

    不知道为什么微信一直对开发者获取:微信头像+微信昵称。一直抱以限制态度,关于接口调用方法,也是一直在修改! open-type=“getUserInfo” 在2021年4月13日停用 wx.getUserInfo 在2021年4月28日停用 wx.getUserProfile 在2022年11月8日停用 但是如果你在接口 停用前 发布的,还可以正常使

    2023年04月08日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包