Я пытаюсь прочитать файл JSON из постоянного хранилища в каталоге Documents. Это небольшой JSON файл без разрывов строк, который проходит валидатор JSON lint. Я успешно могу: resolDirectoryUrl, getFile, get fileEntry и создать fileObject. Я включаю то, что читают журналы консоли ниже. Я вижу все метаданные fileObject. Я могу видеть изменение размера, если я уберу содержание JSON для тестирования.
Я не могу заставить программу чтения файлов читать AsText. Возвращает ошибку: 5 и результат ноль. Когда я пытаюсь просто запустить this._file.readAsText
, я получаю только нулевое значение.
Я могу использовать readAsDataURL как из File Reader, так и просто из this._file.readAsDataURL()
. Он успешно возвращает блоб base64. Я был счастлив получить это, но когда я пытаюсь декодировать его, используя const decodedString = atob(b64str);
, это тоже не получается. В начале строки 2 плохих символа, которые взламывают sh приложение. "ÿþ"
При тестировании строки base64, которую я возвращаю в https://www.base64decode.org/, это дает мне тот же результат, как если бы я декодировал что-то отличное от UTF-8 и ASCII.
Я бы предпочел, чтобы readAsText работал, но был бы счастлив получить правильное декодирование base64 как запасной вариант. Любая помощь приветствуется. Спасибо!
this._file.resolveDirectoryUrl(this.appFileDirectory)
.then((dir) => {
console.log('resolveDirectoryUrl.dir: ' + JSON.stringify(dir));
//{"isFile":false,"isDirectory":true,"name":"","fullPath":"/","filesystem":"<FileSystem: persistent>","nativeURL":"file:///Users/MYNAME/Library/Developer/CoreSimulator/Devices/B2DE2FCD-35AA-43D9-93A7-0CB13542826C/data/Containers/Data/Application/CDC2636D-9D4A-40AB-8BFC-C987124556F0/Documents/"}
this._file.getFile(dir, fileName, {create: false})
.then((fileEntry) => {
console.log('fileEntry.toURL: ' + fileEntry.toURL());
//file:///Users/MYNAME/Library/Developer/CoreSimulator/Devices/B2DE2FCD-35AA-43D9-93A7-0CB13542826C/data/Containers/Data/Application/CDC2636D-9D4A-40AB-8BFC-C987124556F0/Documents/bookmarks.json
console.log('fileEntry: ' + JSON.stringify(fileEntry));
//{"isFile":true,"isDirectory":false,"name":"bookmarks.json","fullPath":"/bookmarks.json","filesystem":"<FileSystem: persistent>","nativeURL":"file:///Users/MYNAME/Library/Developer/CoreSimulator/Devices/B2DE2FCD-35AA-43D9-93A7-0CB13542826C/data/Containers/Data/Application/CDC2636D-9D4A-40AB-8BFC-C987124556F0/Documents/bookmarks.json"}
fileEntry.file((fileObject) =>{
console.log('got fileObject:: ');
console.log(fileObject);
//{"name":"bookmarks.json","localURL":"cdvfile://localhost/persistent/bookmarks.json","type":"application/json","lastModified":1578936573302.0479,"lastModifiedDate":1578936573302.0479,"size":15994,"start":0,"end":15994}
var reader = new FileReader();
reader.onloadstart = function(evt) {
console.log("reader.onloadstart");
console.log(evt);
//{"type":"loadstart","bubbles":false,"cancelBubble":false,"cancelable":false,"lengthComputable":false,"loaded":0,"total":0,"target":{"_readyState":1,"_error":null,"_result":null,"_progress":0,"_localURL":"cdvfile://localhost/persistent/bookmarks.json","_realReader":{"__zone_symbol__originalInstance":{}}}}
};
reader.onloadend = function(evt) {
console.log("reader.onloadend:");
console.log(evt);
//{"type":"loadend","bubbles":false,"cancelBubble":false,"cancelable":false,"lengthComputable":false,"loaded":0,"total":0,"target":{"_readyState":2,"_error":{"code":5},"_result":null,"_progress":0,"_localURL":"cdvfile://localhost/persistent/bookmarks.json","_realReader":{"__zone_symbol__originalInstance":{}}}}
console.log("reader.result:");
console.log(this.result);
//null
};
reader.onprogress = function (evt) {
console.log('reader.onprogress: ');
console.log(evt);
};
reader.onerror = function (err) {
console.log('reader.Err:: ');
console.log(err);
//{"type":"error","bubbles":false,"cancelBubble":false,"cancelable":false,"lengthComputable":false,"loaded":0,"total":0,"target":{"_readyState":2,"_error":{"code":5},"_result":null,"_progress":0,"_localURL":"cdvfile://localhost/persistent/bookmarks.json","_realReader":{"__zone_symbol__originalInstance":{}}}}
};
reader.readAsText(fileObject);
}, (err) => {
console.log('fileEntry err: ');
console.log(err);
})
}).catch((err) => {
console.log('getFile err: ');
console.log(err);
});
});
this._file.readAsText(docsDir, fileName)
.then(fileStr => {
console.log('readAsText.fileStr: ');
console.log(fileStr);//null
}).catch(err => {
console.log('readAsText.err: ');
console.log(err);
});
Ionic:
Ionic CLI : 5.4.2 (/usr/local/lib/node_modules/ionic)
Ionic Framework : @ionic/angular 4.11.8
@angular-devkit/build-angular : 0.801.3
@angular-devkit/schematics : 8.1.3
@angular/cli : 8.1.3
@ionic/angular-toolkit : 2.1.1
Cordova:
Cordova CLI : 8.1.2 (cordova-lib@8.1.1)
Cordova Platforms : ios 5.0.1
Cordova Plugins : cordova-plugin-ionic-keyboard 2.2.0, cordova-plugin-ionic-webview 4.1.3, (and 5 other plugins)
cordova-plugin-file 6.0.2 "File"