微信小程序获取用户信息的接口已经回收,如果还想获取到用户的头像和用户名可以使用以下两种方式。
1.不用保存直接展示
<view class="avatar">
<open-data type="userAvatarUrl"></open-data>
</view>
<view class="nicName">
<open-data type="userNickName"></open-data>
把这段代码放入你想展示用户头像和用户名的地方,自然就会显示当前微信用户的头像和名字。
2.可以把用户的头像和微信名保存起来
<button
class="avatar-wrapper"
open-type="chooseAvatar"
@chooseavatar="onChooseAvatar"
>
<image class="avatar" :src="avatarUrl"></image>
</button>
<input type="nickname" class="weui-input" v-model="name" placeholder="请输入昵称" />
async function onChooseAvatar(e) {
avatarUrl.value = e.detail.avatarUrl; // 这里微信返回给我们一个临时地址,我们需要上传到服务器
console.log(e.detail);
const res = await uni.uploadFile({
url: "https://<APPID>.laf.run/set-userInfo", // 这里更换掉你自己的云函数地址
filePath: avatarUrl.value,
name: "file",
});
}
这段代码是以下效果可以让用户设置一个头像和名称,但是会默认推荐。
云函数上传代码
import cloud from '@lafjs/cloud'
import { S3, PutObjectCommand } from "@aws-sdk/client-s3";
import fs from 'fs'
export async function main(ctx: FunctionContext) {
const image = ctx.files[0]
const s3 = new S3({
endpoint: cloud.env.OSS_EXTERNAL_ENDPOINT,
region: cloud.env.OSS_REGION,
credentials: {
accessKeyId: cloud.env.OSS_ACCESS_KEY,
secretAccessKey: cloud.env.OSS_ACCESS_SECRET,
},
forcePathStyle: true,
});
const fileContent = fs.readFileSync(image.path);
const bucket = `${cloud.env.APP_ID}-avatar`;
const cmd = new PutObjectCommand({
Bucket: bucket,
Key: image.filename,
Body: fileContent,
ContentType: image.mimetype,
});
let res
try {
const res = await s3.send(cmd)
console.log("文件上传成功:", res);
} catch (error) {
console.error("文件上传失败:", error);
}
return res
}