43 votes

Téléchargez des fichiers et stockez-les localement avec les applications Android et iOS de Phonegap / jQuery Mobile

J'ai écrit une application jQuery Mobile et je l'ai intégrée dans les applications iOS et Android de Phonegap.

À ce stade, j'utilise des fichiers JSON stockés localement pour lire les données.

Je souhaite mettre à jour ces fichiers JSON de temps en temps en téléchargeant les fichiers JSON les plus récents à partir d'un serveur.

Comment obtenir le fichier json du serveur et stocker les fichiers json dans le système de fichiers local d'Android et d'iOS?

À la vôtre Johe

94voto

justmoon Points 645

Utilisez FileTransfer.download , voici un exemple:

 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(
                "http://www.w3.org/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);
};
}
 

24voto

j7nn7k Points 5019

C'est comment je l'ai résolu. D'abord définir les chemins d'accès aux fichiers, qui sont différents pour Android et 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
    }
}

Puis-je charger mes fichiers JSON, qui sont préemballés avec l'application, dans le navigateur local de stockage. Comme ceci:

localStorage["my_json_data"] = loadJSON(file_path + "my_json_data.json");

function loadJSON(url) {
    return jQuery.ajax({
        url : url,
        async : false,
        dataType : 'json'
    }).responseText;
}

Si je veux mettre à jour mes données. Je reçois les nouvelles Données JSON à partir du serveur et le pousser dans le local de stockage. Si le serveur est sur un autre domaine, ce qui est le cas la plupart du temps, vous devez faire un JSONP appel (vérifiez jQuery docs sur JSONP). J'ai fait ça un peu comme ceci:

$.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);

});

8voto

Jorge Torres Points 99

Vous pouvez le faire en une seule ligne de code:

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

target_path: peut inclure un répertoire (exemple: dira / dirb / fichier.html) et les répertoires seront créés de manière récursive.

Vous pouvez trouver la bibliothèque pour le faire ici:

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

2voto

avoision Points 997

Ma suggestion serait de regarder dans l' API de fichier de PhoneGap. Je ne l'ai pas utilisé moi-même, mais il devrait faire ce que vous voulez.

0voto

Adarsh V C Points 1598

Pour télécharger et afficher un fichier, suivez le code exemple.

Incluez le code donné juste au-dessus de la balise </head> dans votre index.html

 <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(
                                                                               "http://www.w3.org/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>
 

Voir: - Blog Post

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X