我正在使用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);
如果有人可以提供帮助,我会非常感激。
答案 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;提供的信息在这篇文章中值得一读。