uni-app uni.saveFile 持久化下载的图片 image src无法显示
uni-app uni.saveFile 持久化下载的图片 image src无法显示
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows 11 家庭中文版 23H2 | 4.57 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
手机系统:HarmonyOS NEXT
手机系统版本号:HarmonyOS NEXT Developer Preview
手机厂商:华为
手机机型:HUWEI Mate 60
页面类型:vue
vue版本:vue3
打包方式:云端
操作步骤:
uni.downloadFile下载
uni.saveFile持久化
将持久化的路径显示在
<image class="cc-advert-bg" :src="imageUrl" mode="aspectFill"></image>
中 显示白屏
我已上架的App 都能正常显示,但是这个4.57就说无法显示
### 预期结果:
正常显示
实际结果:
白屏
### bug描述:
我通过 uni.downloadFile 下载的图片在通过uni.saveFile持久化图片 ,
让下载的图片显示在界面上
image src无法显示 显示白屏
更多关于uni-app uni.saveFile 持久化下载的图片 image src无法显示的实战教程也可以访问 https://www.itying.com/category-93-b0.html
您好,方便发个可复现demo吗?以便于更好的排查问题
更多关于uni-app uni.saveFile 持久化下载的图片 image src无法显示的实战教程也可以访问 https://www.itying.com/category-93-b0.html
4.45版本 版本经过测试没有问题
业务逻辑,具体流程如下
首先尝试从缓存中读取上次已下载的闪频广告图片。
若缓存中存在该图片,则直接展示上次下载的闪频广告图片,以快速呈现内容。
若缓存中无对应图片,则展示系统预设的默认闪频广告图片,保证界面的完整性。
发起对服务器端闪频广告图片的下载操作:
成功从服务器下载闪频广告图片后,将其保存至本地缓存中,以便下次优先从缓存中读取,提升加载速度。
测试结果
1、从缓存中获取到路径无法显示
2、根据缓存路径查询文件信息【uni.getSavedFileInfo】获取能查询到但是image 无法显示
2、下载临时图片可显示
3、持久化图片可显示
其他端是否能显示呢,安卓ios/h5/xcx?有试过吗
回复 恭喜n发财: 其它都好的,就鸿蒙不行
回复 恭喜n发财: 而且们正式发布的鸿蒙NEXT App都没有问题,这次改了一些bug在打包 就是白屏
uni.downloadFile({
url: ‘https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png’,
success: (res) => {
uni.saveFile({
tempFilePath: res.tempFilePath,
success: (resp) => {
// this.imagePath = resp.savedFilePath
uni.getSavedFileList({
complete: (ret) => {
uni.showModal({
content: JSON.stringify(ret)
})
this.imagePath = ret.fileList[0].filePath
}
})
}
})
}
})
我对照写了一个在4.45、4.56、4.64的版本上都是可以显示图片的,升级下最新的版本试下呢?
你这样确实没有问题,你把下载的路径缓存起来,然后关闭App进程,再打开App, onReady 中获取缓存,并且将缓存的本地地址设置到image中,此时就白屏无法显示,必须要setTimeout 一下再赋值给image
简单点:再onReady中给image 赋值一个 下载到本地图片的地址就会失效,必须要延迟
回复 Johnny_new: 复现了,感觉生命周期有些问题
根据描述,这个问题可能是由于HarmonyOS NEXT系统对文件访问权限的调整导致的。以下是可能的原因和解决方案:
-
文件路径问题: 在HarmonyOS NEXT上,持久化文件的访问方式可能有变化。建议使用uni.getFileSystemManager().saveFile()保存后,通过uni.getSavedFileList()获取可访问的文件路径。
-
权限问题: 尝试在manifest.json中确保已声明文件读写权限:
"app-plus": {
"permission": [
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"
]
}
- 临时解决方案: 可以尝试使用base64方式显示:
uni.getFileSystemManager().readFile({
filePath: savedFilePath,
encoding: 'base64',
success: (res) => {
this.imageUrl = 'data:image/png;base64,' + res.data
}
})
- 路径转换: 对于持久化文件,尝试使用以下方式转换路径:
plus.io.convertLocalFileSystemURL(savedFilePath)