2016-08-09 3 views
3

Ich arbeite an einer App mit einer speziellen Anforderung - die App arbeitet offline und hat "Sync" -Mechanismus. Das bedeutet, dass der Benutzer bei Bedarf die App mit den Servern synchronisieren kann. Ich implementierte einen Prozess, der cordova 'FileTransfer' und Knoten verwendet, generiert eine JSON-Datei mit den neuesten Daten und lädt sie auf das lokale Dateisystem herunter. Nun dachte ich naiv, dass ich die Daten einfach mit einem Standard-Htrp-Befehl zu dieser Datei abrufen könnte. Aber es hat nicht funktioniert. Also habe ich den Logcat meines Geräts untersucht und festgestellt, dass es nicht möglich ist, HTTP-Anfragen an das 'file: //' Protokoll auszuführen. Beim Schreiben dieser Zeilen macht es Sinn.Angular 2/ionic 2 JSON-Datei vom lokalen Geräte-Dateisystem lesen

Dann wie kann ich das überhaupt tun? Wie kann ich eine Datei im Dateisystem abrufen? Gibt es eine Möglichkeit, einen Dienst zu fälschen, der auf dem Gerät oder Somwethibf läuft?

Danke!

Antwort

0

Sie können dies heraus dargestellt haben, aber:

das Protokoll in Ihrem Pfad weglassen, so verwenden Sie nicht ‚file: //‘

Statt den Pfad verwenden, um direkt zu dem die Datei ist gespeichert, zum Beispiel auf Android wird es wahrscheinlich "/ Assets/Pfad/zu/Datei". so erhalten Sie:

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

Die Frage wegen der unterschiedlichen Wege der JSON-Dateien in lokalen Browser (Computer) und Gerät (Android). Erstellen Sie den Ordner data im Ordner src\assets. Verschieben Sie Ihre JSON-Datei in das.

Wenn wir ionic serve ausführen, wird dieser Ordner (mit Datei) in den Ordner www\assets verschoben. Dann tun Sie folgende Dinge:

  1. Import Platform Service von ionic2

    import { Platform } from 'ionic-angular'; 
    


  1. Inject Platform Dienst.

    constructor(private http: Http, private platform: Platform) { } 
    


  1. Verwendung Platform Dienst.

    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() 
         }); 
    } 
    


0

Verwenden Sie einfach "assets/data/Items.json" anstelle von "/assets/data/Items.json" als Dateipfad. Es funktioniert sowohl auf dem Browser als auch auf dem Android-Gerät.

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