Copie une image dans le dossier de l'application

Par Steeve VERDIEU, il y a 9 ans


Bonjour, comment allezz-vous?

Je travaille sur un projet, et je me retrouve bloquer en ce moment. J'ai un systeme qui permet de recuperer des images dans la gallerie d'android, puis l'afficher et l'uploader sur un serveur PHP si l'utilisateur decide ainsi.

voici mon code

$scope.upload_media_file = function(file_uri, media_type, source){
    alert('A upload');

    //Grab the file name of the photo in the temporary directory
    var currentName = file_uri.replace(/^.*[\\\/]/, '');

    //Creer un nouveau nom pour le fichier
    var date = new Date();
    var new_file_name = '';

    if(media_type === 'PICTURE'){
        var new_file_name =  date.getTime() + '.jpg';
    }
    else if(media_type === 'VIDEO'){
        var new_file_name = date.getTime() + '.mp4';
    }

    //upload_file(nehmiRestApiBasicLink, new_file_name, file_location);
    // Si le fichier est recupere dans la bibliotheque d'android, on en fait un traitement special
    if ($cordovaDevice.getPlatform() == 'Android' && source === 1) {

        alert('Android upload');

        window.FilePath.resolveNativePath(file_uri, function(entry) {
            window.resolveLocalFileSystemURL(entry, success, fail);

                function fail(e) {
                    console.error('Error: ', e);
                }

                function success(fileEntry){
                    var namePath = fileEntry.nativeURL.substr(0, fileEntry.nativeURL.lastIndexOf('/') + 1);

                    $cordovaFile.copyFile(namePath, fileEntry.name, cordova.file.dataDirectory,  new_file_name).then(function(success){
                    var file_location = get_multimedia_url(new_file_name);

                        alert('copie avec success ' + success);

                        //Envoyer l'image ou ;a video sur le serveur
                        upload_file(nehmiRestApiBasicLink, new_file_name, file_location);

                }, function(error){
                    alert('Erreur');
                });
               }
        });
    }
    else{

        var namePath = file_uri.substr(0, file_uri.lastIndexOf('/') + 1);
        // Move the file to permanent storage
        $cordovaFile.moveFile(namePath, currentName, cordova.file.dataDirectory, new_file_name).then(function(success){

            alert('Succes non librairie');
            var file_location = $scope.get_multimedia_url(new_file_name);

               upload_file(nehmiRestApiBasicLink, new_file_name, file_location);

            //$scope.image = new_file_name;
        }, function(error){
            alert('Erreur non libr');
        });
    }
}

L'alert me disant que le fichier est copiée avec success, mais quand j'aille regarder dans le dossier de l'application,il est vide. Quelqu'un peut m'aider a resoudre ce prob s'il vous plait??

8 réponses

Steeve VERDIEU, il y a 9 ans

Personne pour m'aider???

betaWeb, il y a 9 ans

Salut,

Ca ne serait pas tout simplement un problème de permissions ?
As-tu debug les différentes variables afin de vérifier que ton fichier ne soit pas copié dans le mauvais dossier ou qu'il ne soit pas vide ?

Steeve VERDIEU, il y a 9 ans

Peut - etre que c'est le cas, mais je teste mon application directement sur mon telephone car mon ordi ne lance jamais l'emulateur :(

betaWeb, il y a 9 ans

Normalement tu peux débug sous Chrome ;)

Steeve VERDIEU, il y a 9 ans

Heu! J'ai essayé.. Mais chrome ne reconnait pas les dependances incluses avec ngcordova, comme la camera, la gallerie ou autre chose.. tu procede comment pour tester avec?

betaWeb, il y a 9 ans

Je n'ai jamais eu l'occasion de développer une app mobile encore, donc je ne sais pas désolé ^^
Tu devrais faire 2-3 recherches je pense que d'autres ont déjà eu le même problème que toi ;)

Steeve VERDIEU, il y a 9 ans

Ah! Ok! Bah! J'ai recuperé l'url du dossier daans lequel le fichier est copié. Mais je ne le trouve pas dedans.... Ca deconne je ne sais pourquoi...

Steeve VERDIEU, il y a 9 ans

le probleme est peut etre dans mes fichiers
J'ai recuperer l'adresse du fichier apres la copie pour l'afficher dans ma vue, elle s'affiche dynamiquement apres chaque chargement:

window.resolveLocalFileSystemURL(file_uri, function(fileEntry){ alert('native_url: ' + fileEntry.nativeURL); alert('fullPath: ' + fileEntry.fullPath); alert('to Url: ' + fileEntry.toURL()) //Copie du fichier dans le dossier de l'application var namePath = fileEntry.nativeURL.substr(0, fileEntry.nativeURL.lastIndexOf('/') + 1); alert('Le fichier se trouve dans: ' + namePath); var date = new Date(); var new_file_name = date.getTime() + '.jpg'; $cordovaFile.copyFile(namePath, fileEntry.name, cordova.file.dataDirectory, new_file_name).then(function(success){ alert('Copie avec success: ' + JSON.stringify(success)); $scope.is_media = true; //Recuperation des infos de l'image $scope.multimedia_file = { type: 'PICTURE', //Servira a afficher l'image dans une div uri: success.nativeURL, //.. source: source }; alert($scope.multimedia_file.uri) upload_file(nehmiRestApiBasicLink, new_file_name, namePath + fileEntry.name); }, function(err){ alert('Copie avec erreur: ' + JSON.stringify(err)); }) //copie des fichiers dans le dossier de l'application })