HarmonyOS鸿蒙Next中showAssetsCreationDialog保存图片失败,提示13900001
HarmonyOS鸿蒙Next中showAssetsCreationDialog保存图片失败,提示13900001
新手小白,用mate 60 pro 调试showAssetsCreationDialog 保存图片的demo时,总是报13900001
const desFileUris = await phAccessHelper.showAssetsCreationDialog(srcFileUris, config)
console.debug(`目标图片 uri is : ${JSON.stringify(desFileUris)}`)
if (desFileUris.length > 0) {
for (let index = 0; index < desFileUris.length; index++) {
console.log("原路径:" + srcFileUris[index] + ",目标路径:" + desFileUris[index])
//desFileUris[index] :file://media/Photo/112/IMG_1754376064_107/background.jpg
//srcFileUris[index]:file://com.example.myapplication/data/storage/el2/base/haps/entry/files/1754375962905_tmpimg.jpg
// 将来源于应用沙箱的照片内容写入媒体库的目标uri。
let desFile: fs.File = await fs.open(desFileUris[index], fs.OpenMode.WRITE_ONLY);
let srcFile: fs.File = await fs.open(srcFileUris[index], fs.OpenMode.READ_ONLY);
await fs.copyFile(srcFile.fd, desFile.fd);
fs.closeSync(srcFile);
fs.closeSync(desFile);
console.info('拷贝成功');
}
}
当走到await fs.open(desFileUris[index], fs.OpenMode.WRITE_ONLY);
就报13900001,用
fs.openSync(srcFilePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
仍然报13900001,请大神帮忙解决
更多关于HarmonyOS鸿蒙Next中showAssetsCreationDialog保存图片失败,提示13900001的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,showAssetsCreationDialog
返回错误码13900001通常是由于文件路径无效或权限不足导致。请检查以下三点:1)传入的路径是否正确且可写;2)应用是否已申请ohos.permission.WRITE_MEDIA
权限;3)存储空间是否充足。该错误属于文件操作基础错误,需确保目标目录位于应用沙箱或公共媒体目录。
更多关于HarmonyOS鸿蒙Next中showAssetsCreationDialog保存图片失败,提示13900001的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这个错误码13900001通常表示文件操作权限问题。在HarmonyOS Next中,媒体库文件操作需要确保以下几点:
- 检查是否已申请正确的权限:
- 确保在config.json中声明了ohos.permission.READ_MEDIA和ohos.permission.WRITE_MEDIA权限
- 运行时通过requestPermissionsFromUser动态申请权限
- 路径问题:
- 媒体库返回的desFileUris路径是媒体库专用URI,不能直接用fs.open操作
- 应该使用photoAccessHelper的接口来处理媒体库文件
- 正确的做法是:
let asset = await phAccessHelper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg', desFileUris[0]);
await phAccessHelper.insertAssets([asset]);
- 如果确实需要直接操作文件,可以尝试:
let fd = await phAccessHelper.openAsset(desFileUris[0], 'rw');
// 进行文件操作
await phAccessHelper.closeAsset(fd);