2014-03-06 62 views
5

我最近將iOS Cordova項目從2.7.0升級到3.4.0。Cordova 3.4.0上的FileSystem失敗「無法創建目標文件」

升級文件系統訪問被破壞。 (似乎工作在模擬器雖然?)

我收到一條錯誤消息,指出「無法創建目標文件」,我搜索並認爲改變我的「完整路徑」爲「toURL()」,但無濟於事。我真的不知道接下來要做什麼?

這裏是我的下載代碼

window.requestFileSystem(
LocalFileSystem.PERSISTENT, 0, 

function onFileSystemSuccess(fileSystem) { 
fileSystem.root.getFile(
    "dummy.html", { 
    create: true, 
    exclusive: false 
}, 

function gotFileEntry(fileEntry) { 
    var sPath = fileEntry.toURL().replace("dummy.html", ""); 
    var fileTransfer = new FileTransfer(); 
    fileEntry.remove(); 

    fileTransfer.download(
     "https://dl.dropbox.com/u/13253550/db02.xml", 
    sPath + "database.xml", 

    function (theFile) { 
     console.log("download complete: " + theFile.toURI()); 
     showLink(theFile.toURI()); 
     setTimeout(function() { 
      checkConnection(); 
     }, 50); 
    }, 

    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

您是否升級過File插件? 2.7.0到3.4.0是一個很大的飛躍。 –

+0

是的,所有的插件已經更新到最新版本。儘管我同意這是一個很大的飛躍,但我之前在其他項目上做了類似的飛躍,這是第一個有問題的問題 – Hessius

回答

6

我找到的文檔都在文件的插件( link)和文件傳輸的插件( link

使得本次變動後在原來的問題指出,我想知道如果文件插件部分正常,並開始尋找我的fileTransfer代碼和提供的示例之間的差異。

原來我並沒有對我的下載源URL這樣做是encodeURI()(DOH)

如此完整的,工作代碼:

window.requestFileSystem(
LocalFileSystem.PERSISTENT, 0, 

function onFileSystemSuccess(fileSystem) { 
fileSystem.root.getFile(
"dummy.html", { 
create: true, 
exclusive: false 
}, 

function gotFileEntry(fileEntry) { 
var sPath = fileEntry.toURL().replace("dummy.html", ""); 
var fileTransfer = new FileTransfer(); 
fileEntry.remove(); 
var DBuri = encodeURI("https://dl.dropbox.com/u/13253550/db02.xml"); 
fileTransfer.download(
    DBuri, 
sPath + "database.xml", 

function (theFile) { 
    console.log("download complete: " + theFile.toURI()); 
    showLink(theFile.toURI()); 
    setTimeout(function() { 
     checkConnection(); 
    }, 50); 
}, 

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

好東西,謝謝分享修復。 –

+0

對我來說它不工作,應用程序崩潰 – JoDiii

+0

我有同樣的問題,你解決了它。所以,這是有效的。 – allwynmasc

1

其實,

encodeURI("https://dl.dropbox.com/u/13253550/db02.xml") === "https://dl.dropbox.com/u/13253550/db02.xml" 

所以你的解決方案必須有另一個因素;)。升級時我遇到了同樣的問題。 fileEntry.toURL()似乎是解決方案,就像提到的file plugin upgrade notes一樣。

爲了確保您的代碼對這個未來的不使用

fileSystem.root.getFile(
    "dummy.html", { 
... 
var sPath = fileEntry.toURL().replace("dummy.html", ""); 
... 
fileTransfer.download(
    DBuri, 
    sPath + "database.xml" 

。而不是直接去

fileSystem.root.getFile(
    "database.xml", { 
... 
fileTransfer.download(
    DBuri, 
    fileEntry.toURL() 

並讓cordova/phonegap在改造平臺特定的URL的時候完成提升。