HarmonyOS鸿蒙Next中如何使用选择文件api获取文件uri并判断文件类型?还是只能根据后缀判断?
HarmonyOS鸿蒙Next中如何使用选择文件api获取文件uri并判断文件类型?还是只能根据后缀判断? 请问使用选择文件api获取到文件uri,有没有根据这个uri判断文件类型的方法?还是说只能根据后缀判断?
当前文档通过fileuri fs只能获取文件大小、访问时间、修改时间、文件名、文件路径信息
更多关于HarmonyOS鸿蒙Next中如何使用选择文件api获取文件uri并判断文件类型?还是只能根据后缀判断?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,可以使用@ohos.file.picker模块中的PhotoViewPicker或DocumentViewPicker来获取文件URI。通过PhotoViewPicker或DocumentViewPicker选择文件后,返回的结果中包含文件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进行判断。

