从 Ionic4 Android 上读取本地文件内容 (JSON) file:///data/user/0/.. 路径不



我在使用 ionic 框架在 android 上获取本地文件数据时遇到了一个非常奇怪的问题。

情况: 我有一个之前在路径创建的文件 file:///data/user/0/app-id/files/my-folder/xyz.json

我可以在"adb shell"中找到文件,我还用cat检查了里面的数据,一切都很好。在Android-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

它还解决了其他正确的内容,例如名称,完整路径,本机URL

现在问题开始了,因为我找不到获取数据的方法。

this.file.readAsText('', jsonFile).then(fileData => {...
this.file.readAsDataURL('', jsonFile).then(fileData => {...
this.file.readAsBinaryString('', jsonFile).then(fileData => {...
this.file.readAsArrayBuffer('', jsonFile).then(fileData => {...

所有这些都会导致 {代码: 5, 消息: "ENCODING_ERR"}

我还尝试使用本机 http 插件、fetch 和正常的 http 角度请求获取数据......

一切都导致一个cors,404等。

总而言之,我如何从指向file:///data/user/0/app-id/files/的本地路径获取 json 数据......

离子信息:

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 (cordova-lib@9.0.1)
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

我在离子选择器上遇到了相同的\类似问题,从谷歌云端硬盘中选择一个文件。 您只需要将本机路径拆分为路径和文件名即可。无论谷歌驱动器上的任何子目录如何,路径都是相同的。仅在安卓上测试。 我的解决方案就在这里,如果它有帮助的话。

readFileFromChooser() {
this.chooser.getFile('application/json')
.then((chooserResult: ChooserResult) => {
this.filePath.resolveNativePath(chooserResult.uri).then(nativePath => {
const lastSeparator = nativePath.lastIndexOf('/');
const file = nativePath.substr(lastSeparator + 1);
const path = nativePath.substr(0, lastSeparator);
this.file.readAsText(path, file)
.then(value => {
console.log('This is the file contents: ' + value);
}).catch(error => {
console.error(error);
});
}).catch(error => {
console.error(error);
});
}).catch(error => {
console.error(error);
});

}

文件名无效?

根据这篇文章,可能是如果您的文件名具有无效字符,例如在 Windows 上无效并因此保留的:

删除并添加平台?

似乎有人通过删除和添加平台来解决这个问题:

  • https://github.com/ionic-team/ionic-native/issues/3007

将 file:///转换为

http网址?最初我认为这是问题所在并开始编写它,但现在我对这个问题的信心降低了。保留它以防万一它确实有帮助:

如果你看看这篇博文,它谈到了文件网址:

const displayImage = this.webview.convertFileSrc(storedPhoto);

相关内容

最新更新