uni-app端,uni.saveImageToPhotosAlbum成功回调后图片没有保存到相册
uni-app端,uni.saveImageToPhotosAlbum成功回调后图片没有保存到相册
代码示例
uni.getImageInfo({
src: _this.posterImage,
success: (imgInfo) => {
console.log(imgInfo)
uni.saveImageToPhotosAlbum({
filePath: imgInfo.path,
success: (path, errMsg) => {
console.log(errMsg)
console.log(path)
_this.isShow = false
uni.showToast({
title: '已保存到相册',
icon: 'success',
duration: 2000
})
}
})
}
})
getImageInfo success回调成功后,打印出的信息:
{
"path": "file:///storage/emulated/0/Android/data/io.dcloud.HBuilder/apps/HBuilder/doc/uniapp_temp_1649921688022/download/1649921741875_1126633647",
"width": 500,
"height": 850,
"orientation": "up",
"type": "jpeg",
"errMsg": "getImageInfo:ok"
}
uni.saveImageToPhotosAlbum回调成功后,打印出的信息
{
"file": "file:///storage/emulated/0/DCIM/Camera/1649921741875_1126633647",
"path": "file:///storage/emulated/0/DCIM/Camera/1649921741875_1126633647",
"errMsg": "saveImageToPhotosAlbum:ok"
}
提示成功了,但手机相册中没有保存成功,什么原因呢?
@DCloud_UNI_HDX @DCloud_UNI_GSQ 大佬们帮忙看下,这是bug吗?目前在安卓平台下有这个问题,ios没有测试,编译器版本v3
看下应用是否赋予存储权限
android.permission.READ_EXTERNAL_STORAGE android.permission.WRITE_EXTERNAL_STORAGE 是这俩外部存储的读写权限要开启吗?
回复 我一笑而过: 提供个完整示例 我这边测试验证下
回复 DCloud_Android_ST: 权限开的没错吧?
回复 DCloud_Android_ST: 用我那个代码片段可以复现吗?
回复 我一笑而过: 发个完整的 这样我们可以尽快的安排复现因为问题的原因可能与你预想的可能不是一个地方。所以我们都是要求开发者提供完整demo。然后我们再去尝试复现。你提供一下完整的示例。减少无效的沟通浪费时间
回复 DCloud_Android_ST: 好的,我整理好发你们
回复 DCloud_Android_ST: 已提供demo,可复现问题,目前还是无法保存到相册
补充信息:_this.posterImage是一个网络图片
附件为可复现问题的demo @DCloud_Android_ST
bug已确认
回复 DCloud_Android_ST: 是不是也可以给我加点分?
回复 我一笑而过: 加了
bug已确认 后续会修复该问题 请留意HX更新日志
HBuilderX Alpha 3.4.6 已修复
Alpha版,等正式版发了再用吧
然而,华为p40Pro上面这个bug还是存在的
在 uni-app
中使用 uni.saveImageToPhotosAlbum
方法保存图片到相册时,如果成功回调了但图片没有保存到相册,可能是以下几个原因导致的:
1. 权限问题
- Android: 确保应用已经获取了
WRITE_EXTERNAL_STORAGE
权限。如果没有权限,图片将无法保存到相册。 - iOS: 确保应用已经获取了相册的写入权限。如果没有权限,图片将无法保存到相册。
解决方法:
- 在
manifest.json
中配置权限:"permission": { "scope.writePhotosAlbum": { "desc": "需要保存图片到相册" } }
- 在代码中动态请求权限:
uni.authorize({ scope: 'scope.writePhotosAlbum', success() { console.log('授权成功'); }, fail() { console.log('授权失败'); } });
2. 文件路径问题
- 确保你传递给
uni.saveImageToPhotosAlbum
的文件路径是有效的,并且文件确实存在。 - 如果文件路径是网络图片,需要先下载到本地,然后再保存。
解决方法:
- 如果是网络图片,先使用
uni.downloadFile
下载图片到本地,然后再保存:uni.downloadFile({ url: 'https://example.com/image.jpg', success: (res) => { if (res.statusCode === 200) { uni.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: () => { console.log('图片保存成功'); }, fail: (err) => { console.log('图片保存失败', err); } }); } } });
3. 文件格式问题
- 确保图片格式是支持的格式(如
.jpg
,.png
等)。
4. 系统相册刷新问题
- 有时候图片已经保存到相册,但相册没有及时刷新,导致看不到新保存的图片。
解决方法:
- 手动刷新相册,或者等待一段时间再查看。
5. 其他问题
- 如果以上方法都无法解决问题,可能是
uni-app
的 bug 或者系统问题。可以尝试更新uni-app
版本,或者查看官方社区是否有类似问题的解决方案。
示例代码
uni.downloadFile({
url: 'https://example.com/image.jpg',
success: (res) => {
if (res.statusCode === 200) {
uni.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success: () => {
console.log('图片保存成功');
},
fail: (err) => {
console.log('图片保存失败', err);
}
});
}
}
});