解决 open-type 为 chooseAvatar,返回临时路径问题
- 基于微信小程序获取头像昵称规则调整后,当小程序需要让用户完善个人资料时,可以通过微信提供的头像昵称填写能力快速完善
- 微信小程序通过
button
按钮设置 open-type 为 chooseAvatar
时,可以快速获取用户头像; - 官方文档
效果图
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/fcb7e4aa47ff4b71afffa16040899956.png#pic_center)
Demo
<button class="avatar-box" open-type="chooseAvatar" @chooseavatar="onChooseAvatarTap">
<image class="avatar" :src="avatarUrl" mode="aspectFill"></image>
</button>
async onChooseAvatarTap(e) {
console.log('获取用户头像:', e);
const { avatarUrl } = e.detail;
this.avatarUrl = avatarUrl;
},
获取头像回调数据结构效果图
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7144f7cd9f914aed89a3c7bed4234a65.png#pic_center)
解决方式
上传到服务器
const result = await this.uploadFile(avatarUrl);
let ossId = result.ossId;
uploadFile(url) {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: 'xxx',
filePath: url,
name: 'file',
header: {
},
success: (res) => {
resolve(res.data)
},
fail: (res) => {
reject(res);
}
});
})
}
转base64
const fileSystemManager = uni.getFileSystemManager();
fileSystemManager.readFile({
filePath: avatarUrl,
encoding: 'base64',
success: (res) => {
const base64Data = res.data;
let tmpAvatarUrl = `data:image/jpeg;base64,${base64Data}`;
console.log('Base64格式的头像数据:', tmpAvatarUrl);
},
fail: (error) => {
console.error('读取文件失败:', error);
}
});