微信小程序 基础 - 19 (登录后用户头像的更新)

news/2024/7/20 3:09:41 标签: 微信小程序, 小程序

上传更新头像的业务流程:

        1.客户端点击头像选择头像图片

wx.chooseImage()

        2.将头像图片上传到服务器, 并且获取访问该头像图片的网络路径.

        3.将该网络路径, 与当前用户绑定在一起存入数据库

        4.在下次登录时, 获取到最新的头像路径, 就可以看到新头像了

云开发-云存储

        云存储相当于网络云盘, 可以将本地文件上传存入云存储, 也可以在需要的时候从云存储空间将文件下载到本地.

        通过小程序提供的API实现图片上传

wx.cloud.uploadFile()

云开发-云函数

云函数是在小程序端定义, 部署到云端, 在云端执行的函数. 可以将云函数当做是nodejs接口进行调用, 流程:

  1. 小程序使用相关API调用一个已经部署了的云函数.

  2. 执行相应云函数代码, 返回结果.

  3. 小程序端接收云函数返回的结果, 执行后续业务.

例如:编写一个云函数,部署到云服务器,在小程序端调用.

  1. 编写一个云函数

    右键cloudFunctions, 选择新建Nodejs云函数即可. (起个云函数名)

  2. 部署到云服务器

    右键云函数文件夹, 选择上传并部署(云端安装依赖).

  3. 小程序端调用

wx.cloud.callFunction()
// pages/me/me.js
const db = wx.cloud.database({
  env: '......',
})

Page({
  data: {
    nickname: '点击登录',
    avatar: 'https://img.yzcdn.cn/vant/cat.jpeg',
    islogin: false
  },

  //点击头像,选择图片,更新头像路径到数据库
  tapAvatar() {
    if (!this.data.islogin) {
      return
    }
    wx.chooseImage({
      count: 1,
      success: (res) => {
        console.log(res)
        let temPath = res.tempFilePaths[0]
        this.setData({
          avatar: temPath
        })
        //将图片存到服务器(云存储)、更新到数据库中
        this.uploadFile(temPath)
      }
    })
  },
  //上传文件
  uploadFile(temPath) {
    //根据temPath,生成一个随机的图片名称,用于设置云端存储路径
    let ext = temPath.substring(temPath.lastIndexOf('.'))
    let cloudPath = 'img_' + Math.random() + ext
    wx.cloud.uploadFile({
      filePath: temPath,
      cloudPath: cloudPath,
      success: (res) => {
        console.log(res)
        let fileId = res.fileID
        this.updateAvatar(fileId) //更新当前用户头像路径
      }
    })
  },
  //更新云数据库中,当前用户的头像路径
  updateAvatar(fileId) {
    //云函数,获取openid
    wx.cloud.callFunction({
      name: 'sum',
      data: {
        a: 1,
        b: 1
      }
    }).then(res => {
      console.log(res)
      let openid = res.result.openid
      db.collection('users').where({
        _openid:openid
      }).update({
        data:{
          avatarUrl:fileId
        }
      }).then(res=>{
        console.log(res)
      }).catch(err=>{
        console.warn(err)
      })
    })   
  },
})

// 云函数入口文件   cloudfunctions/sum/index.js
const cloud = require('wx-server-sdk')

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}


http://www.niftyadmin.cn/n/508694.html

相关文章

HTML5 新特性 - WebStorage 数据存储

webstorage提供了localStorage与sessionStorage用于在客户端持久化存储键值对数据. localStorage提供了一个独立的数据存储区域,这部分数据将会永久存储在客户端本地. sessionStorage提供了一个独立的数据存储区域,这部分数据只会在当前会话中生效.(浏…

HTML5 新特性 - audio、video 音频与视频标签

音频与视频 HTML5提供了音频与视频相关的新标准(标签)可以使浏览器支持音视频播放. 音频标签 浏览器支持的音频格式: mp3 wav ogg . 简写方式&#xff1a; <audio src"音频文件路径" controls></audio> 标准方式&#xff1a; <audio controls&…

HTML5 新特性 - <audio> <video> 标签的DOM操作

<audio id"audio"></audio> <script>let audio document.getElementById(audio)audio.play() </script> 与媒体相关的DOM对象 包含&#xff1a; HTMLAudioElement 描述音频DOM对象 HTMLVideoElement 描述视频DOM对象 HTMLMediaElement 它…

HTML5 新特性 - 全屏API

html5提供了可以让任何HTML元素及其子元素占满整个屏幕的API&#xff1a; dom对象.requestFullscreen() 退出全屏&#xff1a; document.exitFullscreen()

HTML5 新特性 - Canvas基础图形图像的绘制

什么是canvas? canvas(画布) 是可以使用Javascript来绘制图形的html元素. 基本的语法结构&#xff1a; <canvas id"" width"宽度像素个数" height"高度像素个数"> </canvas> canvas的应用场景 网页特效. 网页游戏. 数据可视化图…

HTML5 新特性 - Canvas路径绘制

路径(path)是将预先设定好的坐标点,按照顺序连接起来所形成的图形. 路径绘制的基本步骤&#xff1a; 调用ctx.beginPath()开启一条新路径. 调用ctx.moveTo(x, y)将画笔移动到指定位置. 调用相关方法开始绘制路径(例如: ctx.lineTo(x, y)) 最后通过stroke() 或 fill()方法进…

HTML5 新特性 - Canvas动画 - 绘制弹幕

动画的实现原理即每隔一段时间(非常快 1/60秒) 重绘canvas 每次绘制时&#xff0c;内容都会有些许变化&#xff0c;由于视觉残留现象&#xff0c;出现动画效果. 示例&#xff1a;设置一个视频播放器&#xff08;播放/暂停、音量-、倍数播放、发送弹幕&#xff09; <!DOCT…

HTML5 新特性 - Canvas 绘制柱形图

效果图&#xff1a; 代码示例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport"…