2015-04-19 50 views
0

我正在使用Phonegap/cordova並編寫一個Android/iOS應用程序,它將從我的服務器下載json數據並將其存儲在本地設備上以供離線使用。在Android上,這完美地工作。我沒有iOS設備,因此依賴於iOS模擬器,它會引發「無法創建目標文件」類型的錯誤。Phonegap&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模擬器,它返回的文檔目錄,但上面沒有寫它。這只是一個模擬器錯誤,或者我做錯了什麼?

謝謝!

+0

你必須創建文件夾和文件在文檔目錄 –

+0

實例化我該怎麼做?我用過http://stackoverflow.com/questions/26806028/load-images-saved-in-ios-app-documents-directory-from-cordova-html-page-cordova的代碼,但它仍然沒有工作...... –

回答

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

}

檢查screenshot-

enter image description here

+0

這隻適用於模擬器?在真實的設備上,這仍然有效? –

0

優秀!得到它的工作。 另外發現並非所有文件都有問題。 Apple不喜歡自定義文件類型,也不喜歡帶有「%20」的文件名。解決以上所有問題都奏效了!