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

时间:2016-08-09 22:51:28

标签: cordova angular typescript

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

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

谢谢!

3 个答案:

答案 0 :(得分:3)

问题是由于本地浏览器(计算机)和设备(android)中json文件的路径不同。在data文件夹中创建src\assets文件夹。将您的json文件移动到该文件中。

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

  1. 导入Platform

    ionic2服务
     import { Platform } from 'ionic-angular';
    

    1. 注入Platform服务。

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

      1. 使用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()
                });
        }
        

答案 1 :(得分:1)

只需使用" assets / data / Items.json"而不是" /assets/data/Items.json"作为文件路径。它将在浏览器和Android设备上运行。

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

答案 2 :(得分:0)

您可能已经想到了这一点,但是:

在您的路径中省略协议,因此请勿使用'file://'

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

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