问题:第一次做头像上传,使用普通的uni.request方法请求接口会报跨域

解决:实际上uni-app官方有头像上传的API,我也翻看了很多博主的文章,最后自己按照人家的思路敲出来了,方法如下:

​
​
<u-avatar :src="avatarUrl" @click="updateAvatar" :size="140" mode="circle"></u-avatar>


import define from '@/utils/define.js'


data() {
	return {
        baseURL:'',
        uploadImg: {},
        fileName: '',
        avatarUrl:'',//头像路径
	}
},
onLoad() {
        this.baseURL = define.baseURL
        this.userInfo = uni.getStorageSync('userInfo') || {}
        this.avatarUrl = uni.getStorageSync('headIcon') || ''
},				
methods:{
	//头像上传
			updateAvatar() {
				let baseUrl = this.baseURL + '/api/file/Uploader/UserAvatar'; //上传地址
				let _self = this
				uni.showActionSheet({
					itemList: ['从相册选择'],
					success: (res) => {
						let index = res.tapIndex;
						if (index == 0) {
							uni.chooseImage({
								count: 1,
								sizeType: ['original', 'compressed'],
								sourceType: ['album'],
								success(res) {
									let tempImg = res.tempFilePaths[0]
									uni.uploadFile({
										url: baseUrl,
										filePath: tempImg,
										method: 'post',
										name: 'file',
										formData: {
											file: tempImg
										},
										success: res => {
											let data = JSON.parse(res.data)
											let headIcon = data.data.name
											this.fileName = headIcon
											request({
												url: '/api/app/User/save/UserAvatar',
												method: 'post',
												data: {
													headIcon
												}
											}).then(res => {
												let data = res.msg//根据后端返回的路径格式拼接路径,我这里拿到的格式是192.168.1.96:30002/image/20220920_341971378611786053.jpg
												if (res.code == 200) {
													_self.avatarUrl = 'http://' +
														data
												}//这里需要添加一个前缀
												uni.setStorageSync('headIcon',
													'http://' + data)
											})
										}
									})
								}
							})
						}
					}
				})
			}
}

​

​

        头像上传之后需要展示,因此后端给我返回了一个路径,也有可能会返回文件流,但是我没有处理过文件流,就让后端帮我做了处理,直接返回路径,路径拼接方式需要根据后端给你返回的格式做处理,一般是拼接baseURL,也有可能像我这样拼接http://

        总之,每个人遇到的情况不一样,我也只是针对个人遇到的情况做个记录,如有问题,欢迎各位大佬指正~~

———————————————————————————————————————————

接上文,因为本次头像上传使用到了本地存储,而另一个页面也同样使用到了上传的头像,因此我们需要在上传头像之后更新另一个页面的头像,我一开始的思路是在另一个页面的onLoad中获取存在本地的头像地址,后来发现我更改了头像,进去另一个页面,头像并未更新,最后发现可以在onShow中取出本地存储的头像路径:

onShow() {
			this.avatarUrl = uni.getStorageSync('headIcon') || ""
		}

问题解决~~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐