我最近将iOS Cordova项目从2.7.0升级到3.4.0。
升级后文件系统访问被破坏。 (虽然似乎在模拟器中工作?)
我收到一条错误消息,指出“无法创建目标文件”,我搜索了一下,并考虑将我的“完整路径”更改为“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);
答案 0 :(得分:6)
我找到了文件插件( link)和fileTransfer插件( link)的文档
在原始问题中进行了更改后,我想知道文件插件部分是否正常,并开始查找我的fileTransfer代码与提供的示例之间的差异。
原来我在我的下载源url(doh)上没有做encodeURI()
所以完整的,有效的代码:
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);
答案 1 :(得分: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解决平台特定网址的转变。