Cordova Angular 2/ionic 2从本地设备文件系统读取json文件

Cordova Angular 2/ionic 2从本地设备文件系统读取json文件,cordova,angular,typescript,Cordova,Angular,Typescript,我正在开发一个有特殊要求的应用程序-该应用程序脱机工作,并具有“同步”机制。 这意味着用户可以按需将应用程序与服务器同步。 我实现了一个过程,使用cordova的“FileTransfer”和node生成一个包含最新数据的json文件,并将其下载到本地文件系统。 现在,我天真地认为我可以使用stabndard htrp rquest获取该文件中的数据。 但它没有起作用。因此,我检查了设备的logcat,发现无法执行对“file://”协议的http请求。在写这些行的时候,它实际上是有意义的 那我

我正在开发一个有特殊要求的应用程序-该应用程序脱机工作,并具有“同步”机制。 这意味着用户可以按需将应用程序与服务器同步。 我实现了一个过程,使用cordova的“FileTransfer”和node生成一个包含最新数据的json文件,并将其下载到本地文件系统。 现在,我天真地认为我可以使用stabndard htrp rquest获取该文件中的数据。 但它没有起作用。因此,我检查了设备的logcat,发现无法执行对“file://”协议的http请求。在写这些行的时候,它实际上是有意义的

那我该怎么做呢? 如何在文件系统上获取文件? 有没有办法伪造在设备或somwethibf上运行的服务


谢谢

您可能已经找到了答案,但是:

在路径中省略协议,因此不要使用“file://”

而是直接使用文件存储位置的路径,例如在android上,它可能是“/assets/path/to/file”。 所以你得到:

this.http.get('/assets/path/to/file').success(function(response){ //do something });

这是因为本地浏览器(计算机)和设备(android)中json文件的路径不同。在
src\assets
文件夹中创建
data
文件夹。将json文件移动到该位置

当我们运行
ionic service
时,它会将该文件夹(带文件)移动到
www\assets
文件夹中。然后做以下事情:

  • 导入
    平台
    ionic2的服务

     import { Platform } from 'ionic-angular';
    

  • 注入
    平台
    服务

      constructor(private http: Http, private platform: Platform ) { }
    
    public getItems() {
    
        var url = 'assets/data/Items.json'; 
    
        if (this.platform.is('cordova') && this.platform.is('android')) {
            url = "/android_asset/www/" + url;
        }
    
        return this.http.get(url)
            .map((res) => {
                return res.json()
            });
    }
    

  • 使用
    平台
    服务

      constructor(private http: Http, private platform: Platform ) { }
    
    public getItems() {
    
        var url = 'assets/data/Items.json'; 
    
        if (this.platform.is('cordova') && this.platform.is('android')) {
            url = "/android_asset/www/" + url;
        }
    
        return this.http.get(url)
            .map((res) => {
                return res.json()
            });
    }
    

  • 只需使用“assets/data/Items.json”而不是“/assets/data/Items.json”作为文件路径。它可以在浏览器和安卓设备上运行

        this.http.get('assets/path/to/file').success((res) => {
           console.log(res);
        });