I recently upgraded my iOS Cordova project from 2.7.0 to 3.4.0.
After upgrading filesystem access is broken. (seems to work in the simulator though?)
I get an error message stating "Could not create target file", I googled around and thought to change my "fullpath" to "toURL()" but to no avail. I really don't know what to try next?
here's my download code
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);
I found the documentation for both the file plugin ( link) and the fileTransfer plugin ( link)
After making the change noted in the original question, I wondered if the file plugin part was OK and started looking for discrepancies between my fileTransfer code and the examples provided.
Turns out I wasn't doing encodeURI() on my download source url (doh)
so the complete, working code:
Actually,
so your solution must have another factor ;) . I had the same problem when upgrading. fileEntry.toURL() appeared to be the solution, just as file plugin upgrade notes mentioned.
To secure your code against this in future don't use
. instead go directly for
and let cordova/phonegap do the lifting when it comes to transforming platform specific urls.