鸿蒙 next 系统使用 uni-app saveImageToPhotosAlbum 报错 无法保存
鸿蒙 next 系统使用 uni-app saveImageToPhotosAlbum 报错 无法保存
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 15.5 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
HBuilderX类型:Alpha
HBuilderX版本号:4.86
手机系统:HarmonyOS NEXT
手机系统版本号:HarmonyOS 5.1.0
手机厂商:华为
手机机型:MatePad 11.5S
页面类型:vue
vue版本:vue3
打包方式:离线
项目创建方式:HBuilderX
示例代码:
ctx.draw(false, () => {
// #ifdef APP-HARMONY
console.log('HARMONY 平台 - Canvas 绘制完成,开始转换为临时文件')
// #endif
uni.canvasToTempFilePath({
canvasId,
width: imageSize,
height: imageSize,
destWidth: imageSize,
destHeight: imageSize,
success: (res) => {
// #ifdef APP-HARMONY
console.log('HARMONY 平台 - 临时文件生成成功,路径:', res)
console.log(typeof res)
const tempFilePath = res.tempFilePath
// #endif
uni.saveImageToPhotosAlbum({
filePath: tempFilePath,
success: (res) => {
// #ifdef APP-HARMONY
console.log(`HARMONY 平台 - 保存到相册成功${res}`)
// #endif
uni.showToast({ title: '已保存到相册', icon: 'success' })
},
fail: (err) => {
// #ifdef APP-HARMONY
console.error('HARMONY 平台 - 保存到相册失败:', JSON.stringify(err))
// #endif
},
})
},
fail: (err) => {
// #ifdef APP-HARMONY
console.error('HARMONY 平台 - 图片转换失败:', JSON.stringify(err))
// #endif
uni.showToast({ title: '图片转换失败', icon: 'none' })
},
})
})
`更多关于鸿蒙 next 系统使用 uni-app saveImageToPhotosAlbum 报错 无法保存的实战教程也可以访问 https://www.itying.com/category-93-b0.html
提供一个可直接运行的代码。
更多关于鸿蒙 next 系统使用 uni-app saveImageToPhotosAlbum 报错 无法保存的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
无论是从网络下还是临时文件保存都报以上错误
因为你不提供可直接运行的代码,提到网络下载之后进行保存是报错的。我使用 HBuilderX 4.86alpha 运行到鸿蒙表现正常
<template>
<view>
<button @click=“save1”>saveImage</button>
</view>
</template>
点击按钮,会正常出现保存图片的弹窗提示。你可根据我的代码进行修改,说明你的问题
使用你提供代码测试还是报错,我添加调用失败的方法,出现了以下报错信息 11:17:21.517 ERR_FILE_NOT_FOUND 11:17:22.654 save1 tap! at pages/test/test.vue:17 11:17:22.781 download /data/storage/el2/base/cache/UNI0xxxx6/uni-download/logo(8).png at pages/test/test.vue:21 11:17:22.802 photoAccessHelper getPhotoAccessHelper inner add createDeleteRequest and showAssetsCreationDialog 11:17:22.802 photoAccessHelper bundleName is com.xxxxx.avatar. 11:17:22.804 photoAccessHelper appId is com.xxxxx.avatar_BJ+xxhNida+21vvd0zp5H6fNTFC2U9NrynanPYirX46Z4v/Enpz6+lUvlcJIdyRA4FVGULKTl4ceesjpumCxtf8=. 11:17:22.804 photoAccessHelper labelId is com.xxxxx.avatar_BJ+xxhNida+21vvd0zp5H6fNTFC2U9NrynanPYirX46Z4v/Enpz6+lUvlcJIdyRA4FVGULKTl4ceesjpumCxtf8=. 11:17:22.808 photoAccessHelper modeleName is . 11:17:22.810 save fail {errMsg: “saveImageToPhotosAlbum:fail Invalid input parameter.”} at pages/test/test.vue:30
补充,我使用unibest来构建项目的
回复 7***@qq.com: 为了高效定位你的问题,请提供复现工程。你可测试新建工程加我的代码来验证功能是否正常。
回复 DCloud_UNI_OttoJi: 感谢你的回复,已经解决了,harmony-configs 配置的问题
回复 7***@qq.com: 好的,后续可尽可能提供复现工程。
在鸿蒙Next系统上,saveImageToPhotosAlbum 接口报错主要涉及权限和路径适配问题。根据你的代码和开发环境,建议排查以下几点:
-
权限配置:鸿蒙Next对存储权限管理严格,确保在
manifest.json中已声明相册写入权限:"permissions": { "ohos.permission.WRITE_IMAGEVIDEO" }同时需在应用首次运行时动态申请权限。
-
路径格式兼容性:鸿蒙Next的文件路径处理可能与Android不同,确认
tempFilePath为合法路径。建议在调用前检查路径是否存在:// 添加路径验证 if (!tempFilePath || !tempFilePath.startsWith('file://')) { console.error('无效的临时文件路径'); return; } -
API异步时序:鸿蒙Next的API调用可能存在时序要求,确保
canvasToTempFilePath完全执行后再调用保存:uni.canvasToTempFilePath({ // ... 参数 complete: () => { // 确保转换完成后再保存 } }) -
系统兼容处理:鸿蒙Next尚处于适配阶段,部分API可能存在兼容问题。可尝试使用
uni.downloadFile作为备选方案:uni.downloadFile({ url: tempFilePath, success: (res) => { if (res.statusCode === 200) { uni.saveImageToPhotosAlbum({ filePath: res.tempFilePath }) } } })


