HarmonyOS 鸿蒙Next photoAccessHelper选择完图片和视频后,返回的photoAccessHelper.PhotoSelectResult是字符串的数组,如何区分选择的是图片或视频

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next photoAccessHelper选择完图片和视频后,返回的photoAccessHelper.PhotoSelectResult是字符串的数组,如何区分选择的是图片或视频

const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE; // 过滤选择媒体文件类型为IMAGE
photoSelectOptions.maxSelectNumber = 9; // 选择媒体文件的最大数目
let uris: Array<string> = [];
const photoViewPicker = new photoAccessHelper.PhotoViewPicker();
photoViewPicker.select(photoSelectOptions).then((photoSelectResult: photoAccessHelper.PhotoSelectResult) => {
uris = photoSelectResult.photoUris;
}).catch((err: BusinessError) => {
console.error(Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message});
})
这里的uri是字符串的数组, 如何知道选择的是图片或视频, 不建议通过判断.jpg是图片这种方式判断, 如果用户把png或者其他格式的存到相册呢? 没有系统的判断方式吗?

2 回复

import picker from '[@ohos](/user/ohos).file.picker';

import photoAccessHelper from '[@ohos](/user/ohos).file.photoAccessHelper';

import { BusinessError } from '[@ohos](/user/ohos).base';

import dataSharePredicates from '[@ohos](/user/ohos).data.dataSharePredicates';

import { common } from '[@kit](/user/kit).AbilityKit';

let context = getContext(this) as common.UIAbilityContext;

[@Entry](/user/Entry)

[@Component](/user/Component)

struct Distinguish {

  [@State](/user/State) uris: Array<string> = []

  build() {

    Column() {

      Button('选择图片和视频').onClick(()=>{

        const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();

        photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE; // 过滤选择媒体文件类型为IMAGE

        photoSelectOptions.maxSelectNumber = 9; // 选择媒体文件的最大数目

        // let uris: Array<string> = [];

        const photoViewPicker = new photoAccessHelper.PhotoViewPicker();

        photoViewPicker.select(photoSelectOptions).then((photoSelectResult: photoAccessHelper.PhotoSelectResult) => {

          this.uris = photoSelectResult.photoUris;

        }).catch((err: BusinessError) => {

          console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);

        })

      })

      Button('区分图片和视频').onClick(async ()=>{

        let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);

        let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();

        // 配置查询条件,使用PhotoViewPicker选择图片返回的uri进行查询

        let fetchOption: photoAccessHelper.FetchOptions = {

          fetchColumns: [],

          predicates: predicates

        };

        let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOption);

        // 得到uri对应的PhotoAsset对象,读取文件的部分信息

        const asset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();

        console.info('asset displayName: ', asset.displayName);

        console.info('asset uri: ', asset.uri);

        console.info('asset photoType: ', asset.photoType);

        console.info('asset width: ', asset.get(photoAccessHelper.PhotoKeys.WIDTH));

        console.info('asset height: ', asset.get(photoAccessHelper.PhotoKeys.HEIGHT));

        console.info('asset title: ' + asset.get(photoAccessHelper.PhotoKeys.TITLE));

        // 获取缩略图

        asset.getThumbnail((err, pixelMap) => {

          if (err == undefined) {

            console.info('getThumbnail successful ' + JSON.stringify(pixelMap));

          } else {

            console.error('getThumbnail fail', err);

          }

        });

      })

    }

    .height('100%')

    .width('100%')

  }

}

在HarmonyOS鸿蒙系统中,当使用photoAccessHelper选择完图片和视频后,返回的photoAccessHelper.PhotoSelectResult是一个字符串数组,这些字符串通常是文件路径。要区分选择的是图片还是视频,可以通过文件路径的扩展名来判断。

具体方法如下:

  1. 遍历photoAccessHelper.PhotoSelectResult返回的字符串数组。
  2. 对每个字符串(文件路径)进行解析,获取其扩展名。
  3. 根据扩展名判断文件类型:
    • 如果扩展名是.jpg.jpeg.png.bmp等常见的图片格式,则该文件是图片。
    • 如果扩展名是.mp4.avi.mov.mkv等常见的视频格式,则该文件是视频。

示例代码(伪代码):

for (String filePath : photoSelectResult) {
    String extension = getFileExtension(filePath);
    if (isImageExtension(extension)) {
        // 处理图片
    } else if (isVideoExtension(extension)) {
        // 处理视频
    }
}

其中,getFileExtension方法用于获取文件扩展名,isImageExtensionisVideoExtension方法用于判断扩展名是否属于图片或视频。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部