我在使用ionic-framework在android上获取本地文件数据时遇到了一个非常奇怪的问题。
情况:我有一个先前在路径file:///data/user/0/app-id/files/my-folder/xyz.json
上创建的文件我可以在“ adb shell”中找到该文件,我还使用cat检查了其中的数据,一切正常。通过Android Studio Studio文件浏览器,我还检查了文件。
使用本机文件插件'@ ionic-native / file / ngx',我也可以确认文件在那里。
const jsonFile = "pathToFile";
this.file.resolveLocalFilesystemUrl(jsonFile).then(fileEntry => {
console.log(fileEntry.nativeURL);
}).catch(err => {
console.log(err);
});
结果:
filesystem: FileSystem {name: "files", root: DirectoryEntry}
isDirectory: false
isFile: true
它还会解决其他正确的内容,例如名称,fullPath,nativeURL
现在问题开始了,因为我找不到获取数据的方法。
this.file.readAsText('', jsonFile).then(fileData => {...
this.file.readAsDataURL('', jsonFile).then(fileData => {...
this.file.readAsBinaryString('', jsonFile).then(fileData => {...
this.file.readAsArrayBuffer('', jsonFile).then(fileData => {...
它们全部都产生一个{code:5,消息:“ ENCODING_ERR”}
我还尝试通过本地http插件,获取和正常的http角度请求来获取数据...
一切都会导致cors,404等。
总而言之,我如何从指向file:/// data / user / 0 / app-id / files / ...]的本地路径中获取json-data 离子信息:
Ionic: Ionic CLI : 5.4.2 (xxxx/.npm-packages/lib/node_modules/ionic) Ionic Framework : @ionic/angular 4.10.0 @angular-devkit/build-angular : 0.801.3 @angular-devkit/schematics : 8.1.3 @angular/cli : 8.1.3 @ionic/angular-toolkit : 2.0.0 Cordova: Cordova CLI : 9.0.0 ([email protected]) Cordova Platforms : android 8.1.0 Cordova Plugins : cordova-plugin-ionic-keyboard 2.2.0, cordova-plugin-ionic-webview 4.1.2, (and 7 other plugins) Utility: cordova-res : 0.7.0 native-run : 0.2.8 System: Android SDK Tools : 26.1.1 (xxxx/Library/Android/sdk) ios-deploy : 1.9.4 NodeJS : v12.10.0 (/usr/local/Cellar/node/12.10.0/bin/node) npm : 6.11.3 OS : macOS Mojave Xcode : Xcode 11.0 Build version 11A420a
我在使用ionic-framework在android上获取本地文件数据时遇到了一个非常奇怪的问题。情况:我有一个先前在路径file:/// data / user / 0 / app-id / files / my-folder / ...]中创建的文件。
无效的文件名?根据this post,可能是您的文件名包含无效字符,例如,:
在Windows上无效,因此保留。删除并添加平台?似乎有人通过删除和添加平台解决了这个问题:
https://github.com/ionic-team/ionic-native/issues/3007
将file:///转换为http url?
起初,我认为这是问题所在,并开始编写,但现在我对此信心不足。保留它以防它有帮助:
- 如果您检出this blog post,则说明文件网址:
const displayImage = this.webview.convertFileSrc(storedPhoto);