2014-03-06 5 views
5

Ich habe kürzlich mein iOS Cordova Projekt von 2.7.0 auf 3.4.0 aktualisiert.FileSystem auf Cordova 3.4.0 schlägt fehl "Konnte keine Zieldatei erstellen"

Nach dem Upgrade Dateisystemzugriff ist gebrochen. (scheint aber im Simulator zu funktionieren?)

Ich bekomme die Fehlermeldung "Ich konnte keine Zieldatei erstellen", ich googelte herum und dachte, mein "Fullpath" zu "toURL()" zu ändern, aber ohne Erfolg. Ich weiß wirklich nicht, was ich als nächstes versuchen soll.

hier ist mein Downloadcode

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

Haben Sie das Datei-Plugin auch aktualisiert? 2.7.0 bis 3.4.0 ist ein großer Sprung. –

+0

Ja, alle Plugins wurden auf die neuesten Versionen aktualisiert. Und obwohl ich zustimme, dass es ein großer Sprung ist, habe ich ähnliche Sprünge vorher mit anderen Projekten gemacht, dies ist der erste mit Problemen – Hessius

Antwort

6

ich die Dokumentation sowohl für die Datei-Plugin ( link) und die Filetransfer-Plugin ( link)

Nachdem die Änderung der ursprünglichen Frage bemerkt gefunden, fragte ich mich wenn der Datei-Plugin-Teil in Ordnung war und nach Diskrepanzen zwischen meinem fileTransfer-Code und den bereitgestellten Beispielen suchte.

Stellt sich heraus, ich war nicht encodeURI() auf meine Download-Quelle url (DOH) zu tun

so die vollständige, Arbeitscode:

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

Gute Sachen, danke für die Freigabe. –

+0

für mich ist es nicht funktioniert, App abgestürzt – JoDiii

+0

Ich hatte das gleiche Problem, und Sie haben es gelöst. Also, das funktioniert. – allwynmasc

1

Eigentlich

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

so Deine Lösung muss einen anderen Faktor haben;). Ich hatte das gleiche Problem beim Upgrade. fileEntry.toURL() schien die Lösung zu sein, genauso wie file plugin upgrade notes erwähnt.

Um Ihren Code gegen diese in Zukunft zu sichern verwenden Sie nicht

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

. Stattdessen gehen Sie direkt für

und lassen Sie Cordova/Phonegap die Aufhebung, wenn es darum geht, plattformspezifische URLs zu transformieren.

Verwandte Themen