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 :

Vérification de l'existance d'un fichier via HTTP


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut Vérification de l'existance d'un fichier via HTTP
    Le traitement que je dois exécuter est simple : j'ai un évènement qui doit me générer un fichier (pdf par exemple) puis ouvrir une nouvelle fenêtre pour l'afficher.
    La où ça se complique c'est que la génération du pdf passe par une file d'attente et que le fichier est créé sur un serveur http différent de celui où s'exécute mon appli.
    En gros j'ai les actions suivantes à effectuer :
    - demande de génération du fichier, je reçois en retour le nom du fichier qui sera généré (ça, c'est fait et ça marche),
    - boucle vérifiant que le fichier est créé et l'affichant quand c'est ok.

    Ma question est donc de savoir s'il y a un moyen d'exécuter une requête http sur le fichier (je sais pas si je m'exprime bien) et de capter la réponse de la requête.

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    quel langage utilises-tu?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut
    Javascript pour le client et java pour le serveur

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    crée un objet xmlhttprequest et teste l'ouverture de fichier dans un try / catch;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try{
    requete.open("POST", "fichier_à_tester", true);
    }
    catch(e){
    alert("fichier introuvable")
    };

  5. #5
    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 658
    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 658
    Billets dans le blog
    1
    Par défaut
    oui ou par le test du status du request ?
    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 !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut
    Je m'excuse mais je n'ai encore jamais utilisé cette technique (pourtant très en vogue), pourrais-tu me donner un peu plus d'info (de code ?):
    où dois-je créer l'objet xmlhttprequest ?
    que dois-je mettre dedans ?
    ...

  7. #7
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut Re: Vérification de l'existance d'un fichier via HTTP
    Citation Envoyé par mouste79
    La où ça se complique c'est que la génération du pdf passe par une file d'attente et que le fichier est créé sur un serveur http différent de celui où s'exécute mon appli.
    Y vas pas aimer le XmlHttpRequest...

  8. #8
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    mouais; sans compter la nécessaire question du timing entre génération et test d'existence;

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut
    c'est justement pour ça que je comptais faire une boucle ou plutôt utiliser setInterval en gérant un timeout. Je regarde à intervalle régulier si le fichier existe et si au bout d'un certain temps j'ai toujours pas le fichier, j'arrête et je préviens l'utilisateur qu'il aura pas son fichier.

  10. #10
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    SF, je me suis aperçu que la simple évocation d'un fichier introuvable dans open() provoquait une erreur; à partir de là, les propriétés liées à la réponse serveur ne sont même pas accessibles;

  11. #11
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par javatwister
    SF, je me suis aperçu que la simple évocation d'un fichier introuvable dans open() provoquait une erreur; à partir de là, les propriétés liées à la réponse serveur ne sont même pas accessibles;
    ??? J'ai des doutes sur ton affirmation, JT. Normalement, le open ne fait rien, c'est uniquement sur le send qu'il fait quelque chose. Et même en cas d'erreur 404, il est sensé ramener le statut.

    C'est sur quel navigateur que tu as vu ça JT?

  12. #12
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    bon, t'as raison, j'avais pas fini mes tests:
    c'est vrai qu'open() ne pose pas problème; c'est setRequestHeader qui renvoyait une erreur et c'est sans doute parce que j'étais en local;


    alors du coup, c'est vrai qu'un timer sur le status paraît le mieux :

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut
    Je m'excuse d'en revenir à mon problème technique, mais comment je fais pour mettre en place le xmlhttprequest.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut
    J'ai tapé le code suivant :

    Code : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    function doRequest(url, method) {
    	var req = null;
    	if (window.ActiveXObject) {
    		// IE
    		try { req = new ActiveXObject("Msxml2.XMLHTTP"); }
    		catch(ex) {
    			// Try with older one
    			try { req = new ActiveXObject("Microsoft.XMLHTTP"); }
    			catch(ex) {	req = null; }
    		}
    	} else {
    		// Mozilla
    		try { req = new XMLHttpRequest(); }
    		catch(ex) { req = null; }
    	} 
     
    	try{ 
    		req.open(method, url, false);
    	} 
    	catch(e){ 
    		alert("fichier introuvable") 
    	};
    	var statut = req.status;
    	return statut;
    }
     
    function verifGeneratedFile() {
    	var url = "http://localhost:9080/ImpressionsLocalesNSI/CPREFO129611133194007446.pdf";
    	alert("url : " + url);
     
    	var ret = doRequest(url, "POST", null, "text/xml");
    	alert("ret : " + ret);
    }
    Que je mette dans l'url un fichier qui existe ou pas, je ne rentre pas dans le bloc catch et j'ai à chaque fois une erreur sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var statut = req.status;

  15. #15
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Il faut que tu fasses un pour envoyer ta requete envoie de regarder le statut.

    Et le try/catch, il n'y en a pas besoin...

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut
    ok j'ai bien un status à 200 pour un fichier qui existe et un à 404 pour un qui n'existe pas.

    Nouveau problème :
    je fais tourner mon appli sur un serveur WAS en localhost et jusqu'à maintenant j'attaquais un fichier sur un serveur WAS d'une autre machine : pas problème, ça marche.
    Mais je viens d'apprendre que le fichier pdf que je dois récupérer se trouvera sur un serveur IIS (c'est comme ça, j'ai pas le choix). Et là, du coup, quand j'attaque un fichier sur ce serveur, j'ai une erreur 405.
    Est-ce normal, y-at-il qque chose à configurer sur le serveur IIS ou est-ce que c'est pas possible d'attaquer le serveur IIS via xmlhttprequest ?

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut
    OK, j'ai trouvé d'où venait le problème en fouillant un peu dans le forum :

    Message posté par denisC (http://www.developpez.net/forums/vie...ght=erreur+405):
    A priori, il s'agit d'un problème d'autorisation: cf La définition par le W3C de http

    Typiquement, le serveur est paramétré pour refuser les requetes en POST vers des documents XML.
    D'ou la question: pourquoi faire une requete en POST vers un document XML?

    Si tu n'as pas de réponse, change le POST en GET et ça devrait le faire...


    J'ai donc fait les 2 tests suivants :
    - utilisation du GET à la place du POST : ça marche.
    - modification de la configuration du serveur IIS pour les extensions pdf et xml : ça marche.

    Je ne connais pas bien la différence entre un GET et un POST alors est-ce que qq'un saurait pourquoi il est recommandé de bloquer les post sur ces types de fichiers ?

  18. #18
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par mouste79
    Je ne connais pas bien la différence entre un GET et un POST alors est-ce que qq'un saurait pourquoi il est recommandé de bloquer les post sur ces types de fichiers ?
    Simplement parceque ça ne rime à rien de faire une requete POST la-dessus. Une requete POST permet de cacher l'ensemble des paramètres passés par la requete. A priori pour XML et PDF tu n'as aucun paramètre, quel serait l'interet de les cacher???

    De tout façon, ça ne changera rien dans ton cas.

    Bien joué pour la recherche 8)

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Par défaut
    Je reviens à la charge sur ce problème car mes tests fonctionnaient mais en fait il y a quand même un soucis.
    Le fichier pdf que je dois ouvrir est transféré par ftp sur le serveur IIS.
    Du coup il arrive que j'ai un statut à 200 (présence du fichier ok) mais qu'il ne soit pas "complètement arrivé". Et quand mon js exécute l'ouverture de mon ficheir dans IE, j'ai une page blanche (si je fais ensuite un reload, j'ai bien le fichier).
    La solution rapide serait de mettre un sleep dans mon javascript mais ça règlerait pas complètement le problème et c'est pas franchement beau.

    Y'aurait-il donc un moyen de s'assurer que le fichier est bien "complet" avant de l'ouvrir ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/09/2012, 00h05
  2. Vérification de l'existence d'un fichier distant
    Par vazkeizh dans le forum Général Java
    Réponses: 2
    Dernier message: 25/06/2008, 11h01
  3. Réponses: 3
    Dernier message: 22/02/2008, 04h03
  4. Recupere un fichier via HTTP
    Par kedare dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 31/10/2006, 19h13
  5. Vérification de l'existence d'un fichier
    Par alfu dans le forum ASP
    Réponses: 2
    Dernier message: 06/10/2004, 13h29

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