使用Phonegap / jQuery Mobile Android和iOS应用程序下载文件并将其存储在本地

我写了一个jQuery Mobile应用程序,并将其与Phonegap打包到iOS和Android应用程序中。

在这一点上,我正在使用本地存储的JSON文件来读取数据。

我想不时更新这些json文件,从服务器上下载新的json文件。

我怎样才能从服务器获取JSON并将JSON文件存储到Android和iOS的本地文件系统?

欢呼Johe

使用FileTransfer.download ,这里是一个例子:

 function downloadFile(){ window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function onFileSystemSuccess(fileSystem) { fileSystem.root.getFile( "dummy.html", {create: true, exclusive: false}, function gotFileEntry(fileEntry) { var sPath = fileEntry.fullPath.replace("dummy.html",""); var fileTransfer = new FileTransfer(); fileEntry.remove(); fileTransfer.download( "2011/web-apps-ws/papers/Nitobi.pdf", sPath + "theFile.pdf", 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); }; } 

这就是我解决它的方法。 首先设置文件path,这对于Android和iOS是不同的

 var file_path; function setFilePath() { if(detectAndroid()) { file_path = "file:///android_asset/www/res/db/"; //4 Android } else { file_path = "res//db//"; //4 apache//iOS/desktop } } 

然后,我将我的JSON文件加载到本地浏览器存储中,这些文件与应用程序预先打包在一起。 喜欢这个:

 localStorage["my_json_data"] = loadJSON(file_path + "my_json_data.json"); function loadJSON(url) { return jQuery.ajax({ url : url, async : false, dataType : 'json' }).responseText; } 

如果我想更新我的数据。 我从服务器获取新的JSON数据并将其推送到本地存储中。 如果服务器位于不同的域中,那么大多数情况下都是这样的,您必须进行JSONP调用(检查JSONP上的jQuery文档)。 我这样做有点像:

 $.getJSON(my_host + 'json.php?function=' + my_json_function + '&callback=?', function (json_data) { //write to local storage localStorage["my_json_data"] = JSON.stringify(json_data); }); 

你可以在一行代码中做到这一点:

 new FileManager().download_file('http://url','target_path',Log('downloaded success')); 

target_path:可以包含目录(例如:dira / dirb / file.html),目录将以recursion方式创build。

你可以在这里find这个库:

https://github.com/torrmal/cordova-simplefilemanagement

我的build议是查看PhoneGap的File API 。 我没有用过它,但它应该做你以后的事情。

新cordova更新答案

 function downloadFile(url, filename, callback, callback_error) { var fileTransfer = new FileTransfer(); fileTransfer.download(url, cordova.file.dataDirectory + "cache/" + filename, function (theFile) { console.log("download complete: " + theFile.toURL()); if (callback) callback(); }, function (error) { console.log("download error source " + error.source); console.log("download error target " + error.target); console.log("upload error code: " + error.code); if (callback_error) callback_error(); } ); } 

要下载和显示文件,请按照示例代码。

在index.html中的</head>标记上方加上给定的代码

 < script type = "text/javascript" charset = "utf-8" > // Wait for Cordova to load document.addEventListener("deviceready", onDeviceReady, false); // Cordova is ready function onDeviceReady() { alert("Going to start download"); downloadFile(); } function downloadFile() { window.requestFileSystem( LocalFileSystem.PERSISTENT, 0, function onFileSystemSuccess(fileSystem) { fileSystem.root.getFile( "dummy.html", { create: true, exclusive: false }, function gotFileEntry(fileEntry) { var sPath = fileEntry.fullPath.replace("dummy.html", ""); var fileTransfer = new FileTransfer(); fileEntry.remove(); fileTransfer.download( "2011/web-apps-ws/papers/Nitobi.pdf", sPath + "theFile.pdf", 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); } function showLink(url) { alert(url); var divEl = document.getElementById("deviceready"); var aElem = document.createElement("a"); aElem.setAttribute("target", "_blank"); aElem.setAttribute("href", url); aElem.appendChild(document.createTextNode("Ready! Click To Open.")) divEl.appendChild(aElem); } function fail(evt) { console.log(evt.target.error.code); } </script> 

请参阅: – 博客文章