我已经为这个问题纠结了好几天了:我无法在Android中读取文件的内容。我尝试了两种方法,结果都一样:它不会继续读取文件(执行在那里冻结),我不会得到结果,也不会得到错误。
我用JS FileReader
试过了
const dirContent: Entry[] = await this.cordovaFile.listDir(this.file.dataDirectory, 'scans');
for (const entry of dirContent) {
if (entry.isFile) {
(entry as FileEntry).file(file => {
const reader = new FileReader();
reader.onloadend = (data) => console.log('I never get here');
reader.readAsText(file);
console.log('I get here');
});
}
}
还尝试了 cordova readAsURL
const dirContent: Entry[] = await this.file.listDir(this.file.dataDirectory, 'scans');
for (const entry of dirContent) {
if (entry.isFile) {
const e = entry as FileEntry;
const path = this.file.dataDirectory + 'scans'; // d.fileName.substring(0, index);
const index = e.nativeURL.lastIndexOf('/');
const filename = e.nativeURL.substring(index + 1);
console.log('I get here');
const contents = await this.file.readAsDataURL(path, filename);
console.log('I never get here');
}
}
上两者相同:执行停止,没有结果或错误。我假设文件被找到了,因为如果我在路径或文件名上犯了错误,我会得到错误。目录I中唯一的文件的文件在500KB以下,RAM应该不是问题。
顺便说一下,我的目标是使用JSZip将文件打包到zip文件中,因此也欢迎阅读内容的替代方法。
1条答案
按热度按时间8mmmxcuj1#
这是令人疲惫和复杂的,但我找到了解决办法在这里:https://github.com/ionic-team/capacitor/issues/1564#issuecomment-538200971。整个线程充满了建议的解决方案,我建议详细阅读,因为对我有效的解决方案可能对您没有用。
我最后做了一个新的函数如下:
关键字是
__zone_symbol__originalInstance
,将其与FileReader
进行“或”运算后,onloadend
最终会触发正确的结果。