HarmonyOS 鸿蒙Next中如何解决fs接口无法读取媒体文件扩展信息问题

HarmonyOS 鸿蒙Next中如何解决fs接口无法读取媒体文件扩展信息问题

【问题现象】

通过临时授权的方式使用PhotoViewPicker.select接口得到uri,在使用photoAccessHelper.getAssets接口获取媒体文件信息时返回空,提示需要申请ohos.permission.READ_IMAGEVIDEO权限,并且会有部分信息获取不到,比如:如何区分文件类型(图片或者视频),视频时长,以及缩略图等。

点击放大

【定位思路】

使用photoAccessHelper.getAssets这个接口前提是需要申请ohos.permission.READ_IMAGEVIDEO权限,如果不申请,无法获取对应的的信息。但是可以通过fs.openSync后,间接区分文件类型,并获取视频时长。

【解决方案】

  1. 获取到url后,使用使用fs.openSync接口,通过uri打开这个文件得到fd:
// 使用fs.openSync接口,通过uri打开这个文件得到fd
let file = fs.openSync(selectUris[0], fs.OpenMode.READ_ONLY);

点击放大

  1. 目前没有直接判断文件类型的方法,可以通过截取文件后缀的方式判断是图片还是视频:
getPathExtension(url) {
  const lastDotIndex = url.lastIndexOf('.');
  if (lastDotIndex < 0) {
    return ''; // 没有找到扩展名
  }
  return url.slice(lastDotIndex + 1);
}
  1. 通过后缀区分图片和视频后,分别获取相关信息。

(1)获取图片相关信息:

// 根据文件fd创建imagSource
const imageSource: image.ImageSource = image.createImageSource(file.fd);
// 完成后关闭fd
fs.closeSync(file);
let decodingOptions: image.DecodingOptions = {
 editable: true,
 desiredPixelFormat: 3,
}
// 创建pixelMap
imageSource.createPixelMap(decodingOptions).then(async (pixelMap1: image.PixelMap) => {
 // pixelMap1的信息可以在这里获取
});

点击放大

(2)获取视频相关信息:

【总结】

对于ohos.permission.READ_IMAGEVIDEO权限,一般向文件管理和网盘类应用开放,而普通应用在HarmonyOS中,直接面向文件级权限管理,可以通过PhotoViewPicker获取需要处理的文件,然后再根据文件类型选择对于的处理方式,从而避免了权限滥用的问题。


更多关于HarmonyOS 鸿蒙Next中如何解决fs接口无法读取媒体文件扩展信息问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next中如何解决fs接口无法读取媒体文件扩展信息问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,若遇到fs接口无法读取媒体文件扩展信息的问题

可能是由于文件系统权限或文件路径处理不当导致的。首先,确保应用已获取必要的文件访问权限,如ohos.permission.READ_MEDIA。其次,检查文件路径是否正确,确保路径指向有效的媒体文件。若路径包含特殊字符或空格,需进行适当的转义或处理。

此外,鸿蒙Next的fs接口可能对某些媒体文件格式的支持有限,建议确认文件格式是否在支持范围内。若问题依旧存在,可以尝试使用@ohos.fileio模块中的File类进行文件操作,或使用@ohos.multimedia.mediaLibrary模块提供的API来访问媒体文件元数据。这些模块提供了更丰富的文件操作和媒体信息读取功能,可能更适合处理媒体文件扩展信息。

回到顶部