我正在使用Phonegap / cordova并编写一个Android / iOS应用程序,该应用程序将从我的服务器下载json数据并在本地存储在设备上以供离线使用。在Android上,这非常有效。我没有iOS设备因此依赖于iOS模拟器,它让我无法创建目标文件"类型错误。
downloadFile:function(path,uri){
var fileTransfer = new FileTransfer();
fileTransfer.download(
encodeURI(path),
app.getStorageLocation()+"files/"+uri,
function(entry) {
console.log("download complete: " + entry.toURL());
app.progressMove();
},
function(error) {
console.log("download error source " + error.source);
console.log("download error target " + error.target);
console.log("upload error code" + error.code);
},
false);
}
getStorageLocation函数是:
getStorageLocation:function(){
if(device.platform == 'Android'){
return cordova.file.externalApplicationStorageDirectory;
}
else if(device.platform == 'iOS'){
return cordova.file.documentsDirectory;
}else{
throw new Error('Unsupported platform: '+device.platform);
}
}
在iOS模拟器上,它确实返回Documents目录,但上面的代码无法写入。这只是一个模拟器错误还是我做错了什么?
谢谢!
答案 0 :(得分:1)
我在documents目录下创建了一个名为dummy.html的文件。以下是用于下载文件的工作代码段。您可以记录路径并查看其指向的位置。使用safari开发工具iOS模拟器进行检查。我添加了文件& filetransfer插件。
function downloadFile() {
window.requestFileSystem(
LocalFileSystem.PERSISTENT, 0,
function onFileSystemSuccess(fileSystem) {
fileSystem.root.getFile(
"dummy.html", {
create: true,
exclusive: false
},
function gotFileEntry(fileEntry) {
console.log(fileEntry);
var sPath = fileEntry.nativeURL.replace("dummy.html", "");
console.log(sPath);
var fileTransfer = new FileTransfer();
fileEntry.remove();
fileTransfer.download(
"http://developer.android.com/assets/images/home/ics-android.png",
sPath + "dummy.png",
function(theFile) {
console.log("download complete: " + theFile.toURI());
showLink(theFile.toURI());
},
function(error) {
console.log("download error source " + error.source);
console.log("download error target " + error.target);
console.log("upload error code: " + error.code);
}
);
},
fail);
},
fail);
}
检查屏幕截图 -
答案 1 :(得分:0)
优良!让它工作。 另外发现并非所有文件都有问题。 Apple不喜欢自定义文件类型,也不喜欢"%20"在他们中。修复以上所有功能!