离子文件传输错误

时间:2015-03-24 11:24:08

标签: angularjs cordova ionic-framework ionic

我正在使用cordova文件传输和文件插件转到服务器并获取一些数据和图像。然后我将这些数据保存到设备的存储器中,数据格式是.json文件和一些图像。我可以将所有数据保存到设备中。

当我尝试使用该数据时,我的问题就出现了。当我尝试加载本地数据时,我得到了

Failed to load resource: net::ERR_FILE_NOT_FOUND file:///android_asset/www/Android/data/com.mydomain.myApp/files/data.json

从控制台日志消息我可以看到'file:/// android_asset / www /'被添加到调用路径时,这是正确的吗?

我正在使用angularjs $资源服务。

var localData = $resource(filePath);

如果有人可以提供帮助,我会非常感激。

2 个答案:

答案 0 :(得分:2)

您确定要将文件存储在正确的文件夹中吗?

阅读Cordova File Plugin documentation,你得到了这个:

  

存储文件的位置

     

从v1.2.0开始,重要文件系统的URL   提供目录。每个URL都在表单中   file:/// path / to / spot /,可以使用转换为DirectoryEntry   window.resolveLocalFileSystemURL()。

     

cordova.file.applicationDirectory - 只读目录所在的位置   应用程序已安装。 (iOS,Android,BlackBerry 10)

     

cordova.file.applicationStorageDirectory - 的根目录   应用程序的沙箱;在iOS上,此位置是只读的(但具体   子目录[比如/ Documents]是读写的)。包含所有数据   内部是应用程序的私人。 (iOS,Android,BlackBerry 10)

     

cordova.file.dataDirectory - 持久和私有数据存储   在应用程序的沙箱中使用内部存储器(在Android上,如果   你需要使用外部存储器,使用.externalDataDirectory)。在iOS上,   此目录未与iCloud同步(使用.syncedDataDirectory)。   (iOS,Android,BlackBerry 10)

     

cordova.file.cacheDirectory - 缓存数据文件或任何目录   您的应用可以轻松重新创建的文件。操作系统可能会删除这些   当设备在存储上运行不足时,应用程序应该   不依赖操作系统来删除这里的文件。 (iOS,Android,BlackBerry   10)

     

cordova.file.externalApplicationStorageDirectory - 应用程序空间   在外部存储上。 (机器人)

     

cordova.file.externalDataDirectory - 在哪里放置特定于应用的数据   外部存储上的文件。 (机器人)

     

cordova.file.externalCacheDirectory - 外部应用程序缓存   存储。 (机器人)

     

cordova.file.externalRootDirectory - 外部存储(SD卡)根目录。   (Android,BlackBerry 10)

     

cordova.file.tempDirectory - 操作系统可以清除的临时目录   将。不要依赖操作系统来清除这个目录;你的应用应该   始终删除适用的文件。 (IOS)

     

cordova.file.syncedDataDirectory - 保存特定于应用程序的文件   应该同步(例如同步到iCloud)。 (IOS)

     

cordova.file.documentsDirectory - 应用程序专用的文件,但是   对其他应用程序(例如Office文件)有意义。 (IOS)

     

cordova.file.sharedDirectory - 全局可供所有人使用的文件   应用程序(BlackBerry 10)

根据这个列表,我的建议是你通常将文件存储在cordova.file.dataDirectory中:

var targetPath = cordova.file.dataDirectory + filename + extension
var fileTransfer = new FileTransfer();
var uri = encodeURI("http://some.server.com/download.php");

fileTransfer.download(
    uri,
    targetPath,
    function(entry) {
        console.log("download complete: " + entry.toURL());
    },
    function(error) {
        console.log("download error source " + error.source);
        console.log("download error target " + error.target);
        console.log("upload error code" + error.code);
    },
    false,
    {
        headers: {
            "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
        }
    }
);

它兼容iOS和Android。

例如,您可以使用targetPath变量打开下载的图像:

//On your controller assign it to the scope
$scope.targetPath = targetPath;

//then on your view just use it as the src for your img
<img ng-src="targetPath">

答案 1 :(得分:1)

好的,所以我做错了。因为数据是本地的,所以我不应该发出$resource请求。我改为使用ngCordova documentation中的readAsText(path, file)

基本上当我将数据保存到.json文件时,它被视为文本文件,然后我可以将该方法与JSON.parse(data);一起使用,然后将其设置为我的范围并用于与远程数据的方式相同。

P.S。我已经尝试了两种&#cord; cordova.file.dataDirectory&#39;和&#39; cordova.file.externalDataDirectory&#39;并且都在我的测试中工作。以及Fabio Antunes&#39;提供的信息在这篇文章中值得一读。