Phonegap& iOS模拟器 - 无法保存下载的文件

时间:2015-04-19 09:47:07

标签: ios cordova

我正在使用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目录,但上面的代码无法写入。这只是一个模拟器错误还是我做错了什么?

谢谢!

2 个答案:

答案 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);

}

检查屏幕截图 -

enter image description here

答案 1 :(得分:0)

优良!让它工作。 另外发现并非所有文件都有问题。 Apple不喜欢自定义文件类型,也不喜欢"%20"在他们中。修复以上所有功能!