web-dev-qa-db-fra.com

Cordova - Télécharger un fichier dans le dossier de téléchargement

J'ai lu beaucoup de messages mais je n'ai pas eu la réponse FINALE. À partir du code à ce lien , j'ai obtenu mon fichier téléchargé dans l'application. Quoi qu'il en soit, j'aimerais le voir dans le dossier "Télécharger". J'utilise Android, mais je voudrais clairement une solution valable pour iOS également.

6
Zappescu

[~ # ~] modifier [~ # ~]

Si vous connaissez déjà le chemin du fichier, vous pouvez simplement le déplacer:

var storageLocation = "";
console.log(device.platform);
switch (device.platform) {

    case "Android":
        storageLocation = 'file:///storage/emulated/0/';
        break;
    case "iOS":
        storageLocation = cordova.file.documentsDirectory;
        break;

}


var fileUri = "file:///data/user/0/com.arsdigitalia.myapp/files/files/MyApp‌​/test.pdf"

function moveFile(fileUri) {
    window.resolveLocalFileSystemURL(
          fileUri,
          function(fileEntry){

                var parentEntry = storageLocation + "Download";
               
                // move the file to a new directory and rename it
               fileEntry.moveTo(parentEntry, "newFile.pdf", success, fail);
                       
          },
          errorCallback);
}

Original

Voici un exemple de code que j'utilise pour accomplir cela. Cela fonctionne mieux sur Android, iOS est un peu différent en raison du sandboxing de l'application, vous devez donc gérer vous-même la récupération des fichiers. J'utilise également le plug-in Cordova pour déterminer sur quel appareil l'application s'exécute.Je peux ensuite modifier les chemins de stockage en fonction:

var storageLocation = "";
console.log(device.platform);
switch (device.platform) {

    case "Android":
        storageLocation = 'file:///storage/emulated/0/';
        break;
    case "iOS":
        storageLocation = cordova.file.documentsDirectory;
        break;

}

window.resolveLocalFileSystemURL(storageLocation,
    function (fileSystem) {

        fileSystem.getDirectory('Download', {
                create: true,
                exclusive: false
            },
            function (directory) {

                //You need to put the name you would like to use for the file here.
                directory.getFile("YOUR_FILE_NAME", {
                        create: true,
                        exclusive: false
                    },
                    function (fileEntry) {


                        fileEntry.createWriter(function (writer) {
                            writer.onwriteend = function () {
                                console.log("File written to downloads")
                            };

                            writer.seek(0);
                            writer.write(YOUR_FILE_HERE); //You need to put the file, blob or base64 representation here.

                        }, errorCallback);
                    }, errorCallback);
            }, errorCallback);
    }, errorCallback);

var errorCallback = function(e) {
    
    console.log("Error: " + e)
    
}

Ensuite, pour récupérer la liste des fichiers du répertoire, vous pouvez utiliser:

window.resolveLocalFileSystemURL(storageLocation,
    function (fileSystem) {
    
        fileSystem.getDirectory('Download', {
                create: true,
                exclusive: false
            },
            function (directory) {

                var reader = directory.createReader();
                reader.readEntries(function (files) {

                    if (files.length == 0) {

                        console.log("No files found in downloads folder.")

                    } else {

                        $.each(files, function (i, v) {

                            console.log("File Name: " + files[i].name;)

                        });

                    }

                }, getFilesFail);
            }, getFilesFail);
    }, getFilesFail);

var getFilesFail = function(e) {
    
    console.log("Error: " + e);
    
}

Pour installer le plugin de périphérique, utilisez cette commande:

cordova plugin add cordova-plugin-device

Documentation ici:

https://cordova.Apache.org/docs/en/latest/reference/cordova-plugin-device/

9
L Balsdon