HarmonyOS鸿蒙Next中在读取媒体文件时出现open: permission denied

HarmonyOS鸿蒙Next中在读取媒体文件时出现open: permission denied 使用 fileAsset.open(‘r’) 读取 FILE 类型的文件就会提示 open: permission denied,把文件后缀改成 png、jpg 之类的就可以正常读取,怎么解决呢?

9 回复

楼主您好,检查mediaType和DirectoryType是否正确,检查权限是否正确申请。

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-medialibrary.md#open8

更多关于HarmonyOS鸿蒙Next中在读取媒体文件时出现open: permission denied的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我申请了’ohos.permission.READ_MEDIA’, 'ohos.permission.WRITE_MEDIA’权限,在FILE.open()的时候还是提示open: permission denied,

ohos.permission.READ_MEDIA权限需要通过拉起弹框由用户确认是否授予该权限。媒体库的使用也有demo可以参考:

https://gitee.com/openharmony/applications_app_samples/tree/master/media/MultiMedia

如果还是不行,请回复下能复现问题的代码和版本号,进一步定位。

标题

这是段落内容。

这是另一段落内容。

await this.context.requestPermissionsFromUser(['ohos.permission.READ_MEDIA', 'ohos.permission.WRITE_MEDIA', 'ohos.permission.MEDIA_LOCATION'], 1)

let media = mediaLibrary.getMediaLibrary();
let fileKeyObj = mediaLibrary.FileKey
let fileType = mediaLibrary.MediaType.FILE
let fileAssetFetchOp = {
  selections: fileKeyObj.RELATIVE_PATH + ' = ?',
  selectionArgs: ['Documents/mapData/'],
};
let fetchResult = await media.getFileAssets(fileAssetFetchOp);
let fileAsset = await fetchResult.getAllObject();
console.info('fileAssetName: ' + fileAsset);
try {
  for (const file of fileAsset) {
    console.info('file:' + file.displayName);
    let fd = await file.open('r');
    let stream = fileio.fdopenStreamSync(fd, 'r')
    await file.close(fd);
  }
} catch (err) {
  console.info('read file failed, message = ' + JSON.stringify(err));
}

api8

楼主您好,

问题已反馈给研发,请耐心等待一下。

楼主您好,提供的代码在设备上验证无问题。进一步定位请提供相关log,还需要明确是api8还是api9,FA模型还是Stage模型。

在HarmonyOS鸿蒙Next中,读取媒体文件时出现“open: permission denied”错误,通常是由于权限问题导致的。HarmonyOS对应用访问系统资源有严格的权限控制,应用在访问媒体文件时,必须声明并获取相应的权限。

首先,确保在应用的config.json文件中声明了ohos.permission.READ_MEDIA权限。例如:

{
  "module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.READ_MEDIA",
        "reason": "读取媒体文件"
      }
    ]
  }
}

其次,应用在运行时需要动态请求权限。可以使用abilityContext.requestPermissionsFromUser方法来请求权限。例如:

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

let context = ...; // 获取AbilityContext
let permissions = ['ohos.permission.READ_MEDIA'];
abilityAccessCtrl.createAtManager().requestPermissionsFromUser(context, permissions).then((data) => {
  if (data.authResults[0] === 0) {
    // 权限授予成功
  } else {
    // 权限被拒绝
  }
});

如果权限已经正确声明和请求,但仍然出现“open: permission denied”错误,可能是由于文件路径不正确或文件不存在。确保文件路径正确,并且文件确实存在于设备上。

此外,检查应用的签名和配置文件是否正确,确保应用在安装时能够正确获取所需的权限。如果问题仍然存在,可能需要检查系统日志以获取更多详细信息。

在HarmonyOS鸿蒙Next中,出现“open: permission denied”错误通常是由于应用没有获取到访问媒体文件的权限。解决方法如下:

  1. 检查权限:确保在应用的config.json文件中声明了ohos.permission.READ_MEDIA权限。
  2. 动态申请权限:在运行时通过requestPermissionsFromUser方法动态申请权限。
  3. 检查文件路径:确认文件路径是否正确,确保文件存在且路径无误。
  4. 检查文件权限:确保文件本身的权限设置允许应用访问。

通过以上步骤,通常可以解决该问题。

回到顶部