原本的格式
原本认为A页面从本地相册选择的图片得到的路径是永久的,再使用uni.setStorageSync把路径存储起来:
uni.chooseImage({
count: 1,
sizeType: ["compressed"],
sourceType: ["album", "camera"],
success: (res) => {
console.log(res);
this.userpic = res.tempFilePaths[0];
uni.setStorageSync('avator',res.tempFilePaths[0]);
}
});
但发现,把APP关掉后台清除掉重新进入之后,A页面的头像却不能正常显示了。
控制台输出查看是否uni.getStotageSync得到的上次选择的图片路径变量—>显示是成功获取到的
再在image标签上使用@error检测是否是获取到图片路径、但却加载不成功
<image :src="userbk" class="image" mode="aspectFill" @click="onuploadbkphoto" @error="onError"/>
得到的报错结果确实是加载失败,404
"errMsg": "GET file:/// storage/emulated/0/Android/data/io.dcloud.HBuilder/apps/HBuilder/doc/uniapp_temp/compressed/1706190582008_retouch_2024012500173323.jpg 404 (Not Found)"
因为uni.chooseImage得到的路径的临时路径,需要再uni.SaveFile存储到本机才能得到永久路径,图片就不会404然后加载失败
修改后
uni.chooseImage({
count: 1,
sizeType: ["compressed"],
sourceType: ["album", "camera"],
success: (res) => {
console.log(res);
this.userbk = res.tempFilePaths[0];
var TempFilePath=res.tempFilePaths[0];
uni.saveFile({
tempFilePath: TempFilePath,
success: function (res) {
console.log("图片永久保存本地成功"+res.savedFilePath)
var savedFilePath = res.savedFilePath;
//同步保存背景路径
uni.setStorageSync('background',savedFilePath);
}
});
}
})
这样B页面也能成功获取到正确存储到图片路径,并且显示。