uniapp项目(vue3)修改小程序头像,并上传图片到oss(华为云)

devtools/2024/12/23 6:43:35/

文章目录

    • 概要
    • 实现流程
    • 实现代码示例

概要

项目使用uniapp开发小程序,需要实现切换头像功能,需要支持使用微信头像和手机相册选择头像。由于小程序用户头像昵称获取规则调整,所以使用微信提供的头像昵称填写能力来实现头像切换功能
提示:微信头像填写能力会唤起弹窗,内置选择微信头像,相册上传,拍照功能

实现流程

使用微信提供的头像昵称填写能力,获取图片上传到 oss 服务,返回 oss 上图片的url地址,并将其保存到数据库中

  1. 获取图片临时地址(wxfile://temp… 、 http://temp…)
  2. 请求自己的服务端接口,获取 oss 签名后的地址,用来上传图片到 oss
  3. 将临时地址转为ArrayBuffer,上传到 oss
  4. 微信公众号后台配置上传域名的合法接口
    在这里插入图片描述

实现代码示例

index.vue文件

<template><button open-type="chooseAvatar" @chooseavatar="onChooseAvatar"><image src="{{avatarUrl}}"></image></button> 
</template>
<script lang="ts" setup>
import {ref} from 'vue'const avatarUrl = ref('')const onChooseAvatar = (e)=>{// e.detail.avatarUrl 就是微信头像填写能返回的图片临时地址 wxfile://temp/xxxxx.jpg 或 http://temp/xxxxx.jpgconst { avatarUrl } = e.detail// 获取图片名称和扩展名,后端需要用来签名(后端要求)const splitPathArr = avatarUrl.split('/')const len = splitPathArr.lengthconst filename= splitPathArr[len - 1]const [name,ext]= filename.split('.')const mineType = ext ? `image/${ext}` : 'image/jpeg'// 请求自己服务端的地址,按照后端的要求传输数据myGetUploadUrl({httpMethod: 'PUT', // 用于签名contentType: mineType, // 用于签名key: filename, // 用于签名}).then((data:uploadUrl)=>{// uploadUrl 是后端签名后返回的 oss 上传地址// uni.getFileSystemManager().readFile获取文件的信息,不配置encoding默认转为ArrayBufferuni.getFileSystemManager().readFile({filePath: avatarUrl,success: ({ data: fileBuffer}) => {uni.request({method: 'PUT', // 推送的方法需要和myRequest的 httpMethod一致url: uploadUrl, // 后端返回的 oss 上传地址data: fileBuffer, // 上传图片的buffer数据header: {'Content-Type': mineType, // 需要和myRequest的 contentType一致},success: () => {// 上传地址的前半部分就是 oss 上的图片地址,直接取出来const imgUrl = uploadUrl.substring(0, res.data.indexOf('?'))avatarUrl.value = imgUrl myUpdateInfo({avatar: imgUrl,}).then(()=>{console.log('头像更新成功')})}})}})})
}
</script>

http://www.ppmy.cn/devtools/107700.html

相关文章

halcon+c#+abb机器人=激光熔覆视觉工作站

包内包含了 1&#xff0c;abb源代码程序及仿真 2&#xff0c;winform程序资源&#xff0c;发布资源&#xff0c;及代码 3&#xff0c;halcon程序及导出程序 有资源绑定&#xff0c;也可通过百度网盘二维码下载

智能电网中巡检机器人的信息安全技术应用

随着电力行业的数字化和智能化发展&#xff0c;智能巡检机器人作为电力系统自动化运维的重要工具&#xff0c;能够在无人干预的情况下&#xff0c;对电网设备进行实时监测和故障诊断。这种高效、可靠的巡检方式在智能电网建设中发挥了重要作用。然而&#xff0c;随着机器人在电…

SQLite 创建表:一场数据库里的“造物运动”

嘿&#xff0c;各位数据库的“造物主”们&#xff01;今天咱们来聊聊SQLite里的一场有趣活动——创建表。没错&#xff0c;就像上帝创造了世界&#xff0c;我们也可以在SQLite数据库里创造属于我们自己的“小世界”。 一、创建表的“魔法咒语” 在SQLite这个“魔法世界”里&a…

php 实现推荐算法

在PHP中实现推荐算法的应用场景通常包括电商、社交媒体、内容平台等。推荐算法可以帮助用户找到与其兴趣相关的内容&#xff0c;提高用户体验和平台黏性。以下是几种常见的推荐算法及其PHP实现方式&#xff1a; 1. 基于协同过滤的推荐算法 协同过滤&#xff08;Collaborative…

性能测试经典案例解析——远程培训系统

各位好&#xff0c;我是 道普云 一站式云测试SaaS平台。一个在软件测试道路上不断折腾十余年的萌新。 欢迎关注我的专栏和我的主页 道普云 文章内容具有一定门槛&#xff0c;建议先赞再收藏慢慢学习&#xff0c;有不懂的问题欢迎私聊我。 希望这篇文章对想提高软件测试水平…

UDP简单聊天室创建

目录 一. 服务端模块实现 二. 处理聊天消息模块实现 三. 调用服务端模块实现 四. 客户端模块实现 五. 效果展示 本文介绍了如何用UDP创建一个简单的聊天室。 一. 服务端模块实现 服务端仍然沿用我们前面的思想&#xff08;高内聚低耦合&#xff09;&#xf…

c++ 原型模式

文章目录 什么是原型模式为什么要使用原型模式使用场景示例 什么是原型模式 用原型实例指定创建对象的种类&#xff0c;并通过拷贝这些原型创建新的对象&#xff0c;简单理解就是“克隆指定对象” 为什么要使用原型模式 原型模式&#xff08;Prototype Pattern&#xff09;是…

青岛实训 8月22号 day34

一、回顾 1.主从复制&#xff08;高可用&#xff09; 2.传统的主从复制 3.gtids事务型的主从复制 4.注意 1&#xff09;server_id唯一 2&#xff09;8.X版本需要get_ssl_pub_key 3&#xff09;5.X不需要 4&#xff09;change master to 5&#xff09;stop | start slave 5.非…