HarmonyOS鸿蒙Next中如何使用选择文件api获取文件uri并判断文件类型?还是只能根据后缀判断?

HarmonyOS鸿蒙Next中如何使用选择文件api获取文件uri并判断文件类型?还是只能根据后缀判断? 请问使用选择文件api获取到文件uri,有没有根据这个uri判断文件类型的方法?还是说只能根据后缀判断?

3 回复

当前文档通过fileuri fs只能获取文件大小、访问时间、修改时间、文件名、文件路径信息

更多关于HarmonyOS鸿蒙Next中如何使用选择文件api获取文件uri并判断文件类型?还是只能根据后缀判断?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,可以使用@ohos.file.picker模块中的PhotoViewPickerDocumentViewPicker来获取文件URI。通过PhotoViewPickerDocumentViewPicker选择文件后,返回的结果中包含文件URI。你可以使用@ohos.file.fs模块中的getFileAccessHelper来获取文件信息并判断文件类型。

获取文件URI的示例代码如下:

import picker from '@ohos.file.picker';
import fileIO from '@ohos.file.fs';

let documentPicker = new picker.DocumentViewPicker();
documentPicker.select().then((uris) => {
  if (uris.length > 0) {
    let fileUri = uris[0];
    // 使用fileUri进行后续操作
  }
}).catch((err) => {
  console.error('Failed to select document', err);
});

判断文件类型可以通过文件头信息进行,而不是仅仅依赖文件后缀。可以使用@ohos.file.fs模块中的read方法读取文件的前几个字节,通过文件头信息判断文件类型。

示例代码如下:

import fileIO from '@ohos.file.fs';

function getFileType(fileUri: string): Promise<string> {
  return new Promise((resolve, reject) => {
    fileIO.open(fileUri, fileIO.OpenMode.READ_ONLY).then((fd) => {
      let buffer = new ArrayBuffer(8);
      fileIO.read(fd, buffer).then((readOut) => {
        fileIO.close(fd);
        let uint8Array = new Uint8Array(buffer);
        // 根据文件头信息判断文件类型
        if (uint8Array[0] === 0x89 && uint8Array[1] === 0x50 && uint8Array[2] === 0x4E && uint8Array[3] === 0x47) {
          resolve('image/png');
        } else if (uint8Array[0] === 0xFF && uint8Array[1] === 0xD8) {
          resolve('image/jpeg');
        } else {
          resolve('unknown');
        }
      }).catch((err) => {
        reject(err);
      });
    }).catch((err) => {
      reject(err);
    });
  });
}

在HarmonyOS鸿蒙Next中,可以使用@ohos.file.picker模块中的FilePicker API选择文件并获取文件URI。通过FilePicker.select方法获取文件URI后,可以使用@ohos.file.fs模块中的stat方法获取文件的基本信息,再结合mimeType属性判断文件类型。虽然文件后缀可以作为参考,但更准确的方式是结合mimeType进行判断。

回到顶部