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

2 回复

在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中,媒体库文件操作需要确保以下几点:

  1. 检查是否已申请正确的权限:
  • 确保在config.json中声明了ohos.permission.READ_MEDIA和ohos.permission.WRITE_MEDIA权限
  • 运行时通过requestPermissionsFromUser动态申请权限
  1. 路径问题:
  • 媒体库返回的desFileUris路径是媒体库专用URI,不能直接用fs.open操作
  • 应该使用photoAccessHelper的接口来处理媒体库文件
  1. 正确的做法是:
let asset = await phAccessHelper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg', desFileUris[0]);
await phAccessHelper.insertAssets([asset]);
  1. 如果确实需要直接操作文件,可以尝试:
let fd = await phAccessHelper.openAsset(desFileUris[0], 'rw');
// 进行文件操作
await phAccessHelper.closeAsset(fd);
回到顶部