HarmonyOS 鸿蒙Next中选择文件后为什么读不到文件信息
HarmonyOS 鸿蒙Next中选择文件后为什么读不到文件信息
选择文件后为什么读不到文件信息
更多关于HarmonyOS 鸿蒙Next中选择文件后为什么读不到文件信息的实战教程也可以访问 https://www.itying.com/category-93-b0.html
【解决方案】
这边resolve里面是怎么实现的呢,这边是可以读取的,参考下示例代码:
import { BusinessError } from '@kit.BasicServicesKit';
import { common } from '@kit.AbilityKit';
import { picker } from '@kit.CoreFileKit';
import { fileIo as fs } from '@kit.CoreFileKit';
@Entry
@Component
struct Index {
build() {
Row() {
Column() {
Button('读取').onClick((event: ClickEvent) => {
try {
let context = getContext(this) as common.Context;
let documentSelectOptions = new picker.DocumentSelectOptions();
let documentPicker = new picker.DocumentViewPicker(context);
documentPicker.select(documentSelectOptions).then((documentSelectResult: Array<string>) => {
console.info('chen DocumentViewPicker.select successfully, documentSelectResult uri: ' +
JSON.stringify(documentSelectResult));
let uri: string = documentSelectResult[0];
//这里需要注意接口权限参数是fs.OpenMode.READ_ONLY。
let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
console.info('tag file fd: ' + file.fd + 'url:' + file.path);
let buffer = new ArrayBuffer(4096);
let readLen = fs.readSync(file.fd, buffer);
console.info('tag readSync data to file succeed and buffer size is:' + readLen);
//读取完成后关闭fd。
fs.closeSync(file);
}).catch((err: BusinessError) => {
console.error('DocumentViewPicker.select failed with err: ' + JSON.stringify(err));
});
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error('DocumentViewPicker failed with err: ' + JSON.stringify(err));
}
})
}
.width('100%')
}
.height('100%')
}
}
更多关于HarmonyOS 鸿蒙Next中选择文件后为什么读不到文件信息的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
你好,tag readSync data to file succeed and buffer size is:4096,为什么读取的是let buffer = new ArrayBuffer(4096)设置的值,如果我想读取到这个文件内容该怎么做,
这边是需要读取pdf文件做展示吗?还是只需要读取该文件的字节?这边只是演示了一个字节的示例。
如果需要读取pdf做展示可以参考demo: https://developer.huawei.com/consumer/cn/doc/architecture-guides/import_pdf-0000002378274393
如果需要读取完整的字节数可以参考:
let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
let stat = fs.statSync(file.fd)
let buffer = new ArrayBuffer(stat.size);
let readLen = fs.readSync(file.fd, buffer);
好的,谢谢大佬,
在HarmonyOS Next中,选择文件后无法读取文件信息,通常是由于权限配置或URI解析问题导致。需检查应用是否已正确申请ohos.permission.READ_MEDIA权限,并在module.json5中声明。若使用Picker选择文件,需通过安全组件解包URI获取真实路径,直接使用返回的URI可能无法访问。另需确认文件选择器返回的URI是否有效,并使用FilePicker.getSecurePath方法解析路径。
在HarmonyOS Next中,选择文件后无法读取文件信息通常与权限配置或URI处理方式有关。首先检查是否在module.json5
中正确声明了存储权限(如ohos.permission.READ_MEDIA
),并确保在代码中动态申请了相关权限。其次,通过PhotoViewPicker
或DocumentViewPicker
获取的URI需要使用FileHelper
或ResourceManager
进行解析,直接使用路径字符串可能导致访问失败。建议使用官方提供的fileIo
接口处理URI,并确认目标文件未被加密或损坏。若问题持续,可检查系统日志获取详细错误信息。