[uni-app] 微信小程序 如何修改替换头像

本文介绍了在uni-app框架下,结合uView UI,实现微信小程序中修改头像的功能。通过监听头像点击事件,使用uni.chooseImage选择图片,接着uni.uploadFile上传图片到服务器,获取base64字符串,并与后端接口配合完成头像更新。在实现过程中,作者建议与后端开发充分沟通,优化接口设计以提高效率。
摘要由CSDN通过智能技术生成

 如下图所示,微信小程序中涉及到修改头像的交互

技术:

前端应用框架为uni-app

UI框架为uView


 思考:

1. 头像点击事件 click

2.从本地相册选择图片或使用相机拍照uni.chooseImage(OBJECT),方法执行成功后根据success中返回的图片的本地文件路径列表 tempFilePaths,做操作

3.上传图片uni.uploadFile(OBJECT),通过上传接口拿到图片的路径或者跟图片有关的值,再根据这个值调取后端接口拿到base64字符串 【最后还是要看后端开发要怎么设计了,说白了都是从接口里拿到想要的值。。】

<u-cell title="头像" :border="false" isLink>
    <view slot="icon">
		<u-icon name="photo" color="#eac47f"></u-icon>
	</view>
	<view slot="value">
		<u-avatar :src="userPhoto" shape="circle" @click="changeUserPhoto"></u-avatar>
	</view>
</u-cell>

js: 

// 点击头像触发click事件 changeUserPhoto

      changeUserPhoto() {
			let _this = this;
			uni.chooseImage({
				count: 1, //默认9
				sizeType: ["original", "compressed"], //可以指定是原图还是压缩图,默认二者都有
				sourceType: ["album", "camera"], //从相册选择或者打开相机
				success: function (res) {
					if (res.tempFiles[0].size > 2 * 1024 * 1024) {
						_this.$refs.uToast.show({
							type: "error",
							message: "图片大小不得超过2MB"
						});
					} else {
						uni.uploadFile({
							url: `${Config.baseURL}jz-fileserver/api/v1/attachs?relationType=profile`,
							filePath: res.tempFilePaths[0],
							name: "file",
							success: uploadFileRes => {
                                // 根据返回的uploadFileRes.data做操作,往下逻辑要怎么写关键还是要看后端如何处理。就当前逻辑该上传接口返回的是图片需要的一个ID,
								// 该方法是通过将uploadFileRes.data中的某个值传参给后端,后端返回ArrayBuffer对象,最后在专程Base64字符串
                                _this.showPhoto(uploadFileRes.data)
							}
						});
					}
				}
			});
		},

// 转base64,将ArrayBuffer对象,转成Base64字符串,最后赋值
showPhoto(data) {
			this.$http
				.showPhoto({
					id: JSON.parse(data.data.id),
					size: "300"
				})
				.then(res => {
					const arrayBuffer = new Uint8Array(res.data);
					this.userPhoto = `data:image/jpeg;base64,${uni.arrayBufferToBase64(arrayBuffer)}`;
					
				});
		}
	}

以上完成了头像的修改

在写这块的业务处理逻辑时,个人时感觉某些接口还是有多余设计成分在里面的,此时还是要多根跟后端开发好好商量设计下如何解决才更高效!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值