uniapp头像上传功能
uniapp做头像上传,使用普通的uni.request方法请求接口会报跨域。
·
问题:第一次做头像上传,使用普通的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') || ""
}
问题解决~~
更多推荐
已为社区贡献1条内容
所有评论(0)