這幾天我一直在努力解決這個問題:我無法在 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');
});
}
}
并且還嘗試了 CordovareadAsURL
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 檔案,因此也歡迎替代閱讀內容。
uj5u.com熱心網友回復:
這既累人又復雜,但我在這里找到了解決方案:https ://github.com/ionic-team/capacitor/issues/1564#issuecomment-538200971 。整個執行緒充滿了建議的解決方案,我建議詳細閱讀,因為對我有用的解決方案可能對你沒有用。
我終于做了一個新功能如下:
private async getFileContents(fileEntry: FileEntry): Promise<string> {
return new Promise<string>(resolve => {
fileEntry.file(iFile => {
const fileReader = new FileReader();
const zoneOriginalInstance = (fileReader as any).__zone_symbol__originalInstance;
const reader = zoneOriginalInstance || fileReader;
reader.onloadend = (data) => resolve(data.target._result as string);
reader.readAsDataURL(iFile);
});
});
}
關鍵是這個__zone_symbol__originalInstance。在 ORing 到FileReaderfinallyonloadend觸發器之后,結果正確。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/516675.html
