IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Récupérer un fichier sur un ftp via une application mobile


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Par défaut Récupérer un fichier sur un ftp via une application mobile
    Bonjour,

    Je suis actuellement en stage dans une entreprise ou je réalise une application HTML5 / JavaScript pour périphériques mobiles.
    Le fait est que mon application est quasiment terminée et seule la fonctionnalité de mise à jour reste à développer.
    Le but de la fonction mise à jour est de récupérer un fichier XML sur un des serveurs FTP de l'entreprise.

    Conscient des problème de "same origin policy", j'ai orienté mes recherche vers CORS ainsi que d'autres solutions à base d'iframe.
    A ce jour ma tentative la plus fructueuse à été obtenue grâce au code suivant :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var userID = "ID",
        password = "PASSWORD",
        server = "ftp.entreprise.fr/test.xml";
     
    if (userID && password && server) {
        var ftpwww = "ftp://" + userID + ":" + password + "@" + server;
        window.location = ftpwww;
    } else {
        alert("Fail");
    }

    En découle le problème suivant :

    Je build mon application grâce à l'IDE Intel XDK. Lors de mes test le code suivant me redirige vers le fichier test.xml et m'affiche sont contenu.
    Je désire trouver un moyen de sauvegarder ledit contenu du fichier dans une variable ou une <div> afin de mettre à jour l'ancien fichier.

    Merci de me faire part de vos avis et conseils.

    PS : L'administrateur du serveur à déjà autorisé l'adresse IP du téléphone de test (Iphone5S).

    EDIT : Voici les principales ressources étudiées lors de mes recherches :

    http://jquery-howto.blogspot.fr/2013...x-request.html
    http://docs.phonegap.com/en/4.0.0/gu..._index.md.html

  2. #2
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Billets dans le blog
    55
    Par défaut
    Superslinky,

    Avec AJAX, récupérer le contenu d'un fichier XML est une chose élémentaire.

    Je le fais très souvent, as tu essayé ?

    Marc,
    Développeur Java
    Site Web

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Par défaut
    Bonjour Marc,

    Merci pour ta réponse mais malheureusement le problème se situe au niveau de la "same origin policy".

    Récupérer le contenu d'un fichier en local est certes simple mais je ne trouve pas d'exemple concernant la récupération d'un fichier distant (surtout sur un FTP)

    J'ai bien tenté de cette manière mais je ne reçois même pas de réponses ou de codes d'erreur :

    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $.ajax({
        type: "GET",
        url: "ftp://ID:PASSWORD@ftp.entreprise.fr/test.xml",
        dataType: "xml",
        beforeSend: function () {
            console.log('Chargement...');
        },
        success: function (maj) {
            $(maj).find('NODE').each(function () {
                // CODE
            }
        },
        complete: function () {
            console.log('Chargement réussit');
        }
    });

    Je me suis renseigné sur la configuration d'un serveur HTTP pour le Cross Domain Request mais aucunes informations ne ressortent pour les FTP.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    pourquoi donc en ftp ???
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Billets dans le blog
    55
    Par défaut
    Je suis bien d'accord avec Spacefrog. Tu te compliques la vie, tu n'as qu'à mettre ton fichier XML sur ton serveur web.

    Met le dans un répertoire XmlFiles à coté de ton répertoire images...

    Perso c'est ce que je fais couramment.
    Développeur Java
    Site Web

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Par défaut
    Merci pour vos réponses,

    La solution du FTP m'était imposée par l'entreprise, et relevait un défi intéressant. Cependant une autre solution a été trouvée :
    le fichier XML est hébergé sur un serveur web derrière un reverse proxy avec un accès en HTTPS. À moi de trouver la configuration idéale pour y accéder.

    À l'heure actuelle le serveur me retourne la réponse "200 OK" pour ma requête "GET" suivi du message d'erreur suivant :

    Blocage d'une requête multi-origines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur https://extra.entreprise.fr/dossier_Du_Fichier/. Raison : l'en-tête CORS « Access-Control-Allow-Origin » est manquant.
    Une solution intéressante serait d'ajouter à la racine du répertoire un fichier .htaccess contenant certain paramètres :

    Code .htaccess : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    AuthName "Identifiants requis pour la mise à jour"
    AuthType Basic
    AuthUserFile "/home/site/www/dossier/.htpasswd"
    Require valid-user
     
    Header set Access-Control-Allow-Origin: "*"

    Code .htpasswd : Sélectionner tout - Visualiser dans une fenêtre à part
    login:mdp(hash)

    Sachant que mon application possède déjà le paramètre : <access origin="*"/> (Trouvé via la documentation de Apache Cordova), je voudrais savoir comment passer les login/mdp directement dans ma requête Ajax de manière sécurisé.
    Mes recherches m'ont orienté vers l'option "withCredentials = true;" mais j'ai du mal à saisir le concept.

    Pourriez-vous m'éclairer sur la voie à suivre?

    Merci d'avance.

    EDIT : le servlet servant à rediriger le flux sur le serveur a été configuré pour autoriser les requêtes cross-domain ce qui me permet de récupérer la réponse de la manière suivante :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    $(document).on('click', '#maj', function () {
     
        $.ajax({
              type: "GET",
              url: "https://extra.entreprise.fr/dossier/GetFluxXmlServlet",
              dataType: "text",
              beforeSend: function () {
                  console.log('beforeSend');
              },
     
              success: function (maj) {
                  var test = maj;
                  // Code de manipulation
              },
     
              complete: function () {
                console.log('complete');
              }
          });
    });

    Merci à tous pour votre aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer contenu fichier sur un FTP
    Par CliffeCSTL dans le forum Général Java
    Réponses: 5
    Dernier message: 26/06/2015, 16h34
  2. Réponses: 4
    Dernier message: 02/08/2011, 11h10
  3. Comment faire une connexion FTP dans une application Mobile ?
    Par yaa3djaa dans le forum Windows Mobile
    Réponses: 4
    Dernier message: 02/04/2010, 17h26
  4. Récupérer un fichier sur un FTP et en lire le contenu
    Par nico1214 dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 23/06/2009, 17h22
  5. Réponses: 3
    Dernier message: 21/02/2009, 19h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo