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

Delphi Discussion :

[TIdHttp]Téléchargement d'un fichier inexistant


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut [TIdHttp]Téléchargement d'un fichier inexistant
    Je voudrais savoir comment gérer le téléchargement d'un fichier inexistant.
    Comment faire pour savoir que la méthode Get ne renvoie pas le fichier demandé mais une redirection 404 par exemple?

    J'avoue que je ne sais pas par quel côté commencer
    Mais quelle bordel !

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    En faite, en reprenant l'exemple de la FAQ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
     Fs : TFileStream;
    begin
      Fs := TFileStream.Create('c:\test.txt',fmCreate);
      try
        DownloadHTTP('http://www.developpez.net/forums/viewforum.php?f=2',TStream(fs));
      finally
        Fs.Free;
      end;
    end;
    C'est savoir si l'adresse http://www.developpez.net/forums/viewforum.php?f=2 existe et que je n'ai pas une autre adresse qui est renvoyée
    Mais quelle bordel !

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Ca s'appel la redirection ^^
    Et c'est toujours expliqué dans la

    http://delphi.developpez.com/faq/?pa...ndyredirection
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Je viens de discuter avec le responsable des sites chez nous et visiblement, les pages en erreur sont redigirées vers la page d'accueil ...

    Ai je un moyen de vérifier que l'adresse que j'ai introduite et l'adresse finale ne sont pas les mêmes?

    Voici mon code :
    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      GetStream : TMemoryStream;
    begin
    GetStream := TMemoryStream.Create;
    GetStream.Clear;
    with IdHTTP1 do
      try
          try
            HandleRedirects := true;
            ShowMessage(Get('http://www.gdbi.com/2fdfsdfsf.zip'));
          except
            On e : Exception do
              MessageDlg(Format('Erreur : %s',[e.Message]), mtInformation,[mbOK],0);
          end;
      finally
          GetStream.Free;
      end;
    end;
    Mais quelle bordel !

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    tu as la propriété ResponseCode qui va t'indiquer l'erreur (404,200, etc ...).
    puis pour plus d'info ResponseText.
    Mais normalement si tu n'arrives pas a dl le fichier tu auras une exception qui va se faire par indy.
    As tu testé ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par Malatar
    tu as la propriété ResponseCode qui va t'indiquer l'erreur (404,200, etc ...).
    puis pour plus d'info ResponseText.
    Mais normalement si tu n'arrives pas a dl le fichier tu auras une exception qui va se faire par indy.
    As tu testé ?
    Je vais tester avec les commandes que tu me donnes, mais pour l'instant je tape une adresse de notre site qui pointe vers un fichier bidon, et rien ne se passe point de vue exception.
    Malheureusement le site redirige directement sans erreur, c'est peut être la d'ou viens le problème ... ce qui pourrait résoudre le problème, c'est de faire un check entre l'adresse d'origine et celle d'arrivée.

    On peut trouver une solution en interne en stockant les fichiers sur une partie du serveur qui peut gérer les redirections (404, 200, ...) mais j'avoue que j'aimerais connaitre la solution si un jour je ne sais pas contourner le problème
    Mais quelle bordel !

  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Jette un oeil sur l'événement OnRedirect du composant.
    Si tu as une redirection il passe obligatoirement dedans, a toi de gérer cela ^^
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Je viens de tester avec 2 adresses, une avec une erreur 404 et l'autre avec une redirection du server et en aucun cas l'évènement OnRedirect ne s'est enclenché
    Mais quelle bordel !

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Est ce que tu as mis HandleRedirect à True ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Oui, j'ai bien suivis ce que tu disais et le maximum est bien sur 15
    Mais quelle bordel !

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Lors de la levée d'une exception, la programme continue t'il à suivre les instructions ou bien sort-il de la fonction comme un break ou un exit?

    Dans le code suivant, lorsque qu'une exception est levée, la fonction s'arrête comme si un exit avait été programmé alors qu'en réalité je veux juste vérifier si le fichier est présent à l'endroit demandé.
    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
     
    if FileExists(ExtractFilePath(Application.ExeName) + LibOFML[NbrLib] + '.xml') then
      else
      begin
        Tms := TMemoryStream.Create;
        try
          TFs := TFileStream.Create(ExtractFilePath(Application.ExeName) + LibOFML[NbrLib] + '.xml',fmCreate);
          try
            try
              IdHTTP1.Get(UrlUpdateWebsite + UrlUpdateConfigFiles + LibOFML[NbrLib] + '.xml',TFs);
              Tms.LoadFromStream(TFs);                
            except
              On e : Exception do
              begin
                ShowMessage('File ' + LibOFML[NbrLib] + ' not found, please Contact Helpdesk at *******');
                Break;
              end;
            end;
          finally
            TFs.Free;
          end;
        finally
          Tms.Free;
        end;
     end;
    Autre question, j'avoue avoir du mal avec les stream ... mon code est correct?
    Si oui, est ce possible de ne pas créer le fichier si il n'existe pas sur le server?
    J'ai voulu faire un TFs(TFileStream).LoadFromStream mais cette méthode n'existe pas pour le TFileStream.
    Mais quelle bordel !

  13. #13
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par davels
    Lors de la levée d'une exception, la programme continue t'il à suivre les instructions ou bien sort-il de la fonction comme un break ou un exit?
    Tout depend de comment tu as programmé ton code.

    Citation Envoyé par davels
    Dans le code suivant, lorsque qu'une exception est levée, la fonction s'arrête comme si un exit avait été programmé alors qu'en réalité je veux juste vérifier si le fichier est présent à l'endroit demandé.
    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
     
    if FileExists(ExtractFilePath(Application.ExeName) + LibOFML[NbrLib] + '.xml') then
      else
      begin
        Tms := TMemoryStream.Create;
        try
          TFs := TFileStream.Create(ExtractFilePath(Application.ExeName) + LibOFML[NbrLib] + '.xml',fmCreate);
          try
            try
              IdHTTP1.Get(UrlUpdateWebsite + UrlUpdateConfigFiles + LibOFML[NbrLib] + '.xml',TFs);
              Tms.LoadFromStream(TFs);                
            except
              On e : Exception do
              begin
                ShowMessage('File ' + LibOFML[NbrLib] + ' not found, please Contact Helpdesk at *******');
                Break;
              end;
            end;
          finally
            TFs.Free;
          end;
        finally
          Tms.Free;
        end;
     end;
    Au vu de ton code c'est normal que cela s'arrete. Tu affiches un message puis tu break ta fonction (Break qui est inutile au vu du bout de code que tu fournis)


    Citation Envoyé par davels
    Autre question, j'avoue avoir du mal avec les stream ... mon code est correct?
    Si oui, est ce possible de ne pas créer le fichier si il n'existe pas sur le server?
    J'ai voulu faire un TFs(TFileStream).LoadFromStream mais cette méthode n'existe pas pour le TFileStream.
    Oui, il est possible de ne pas créer le fichier en utilisant un TMemoryStream, puis après si tu veux vraiment créer le fichier alors utilises CopyFrom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TFs.CopyFrom(Tms,tms.Size);
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par Malatar
    Au vu de ton code c'est normal que cela s'arrete. Tu affiches un message puis tu break ta fonction (Break qui est inutile au vu du bout de code que tu fournis)
    En faite, c'est un bout de code est dans une boucle While et j'aimerais que si le fichier n'existe pas en local ou sur internet la procédure stop à cet endroit et recommence la boucle.
    A mon avis, je dois plus insérer les mes controles dans des tests.

    Merci pour le copyFrom
    Mais quelle bordel !

  15. #15
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par davels
    En faite, c'est un bout de code est dans une boucle While et j'aimerais que si le fichier n'existe pas en local ou sur internet la procédure stop à cet endroit et recommence la boucle.
    A mon avis, je dois plus insérer les mes controles dans des tests.

    Merci pour le copyFrom
    Fait voir le code de ta boucle en complet.

    Sinon, ci dessous une piste

    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
    While true do
    begin
      try
        // Ici la création des compos
        try
          // Récupération du fichier
          [Code de la récupération du fichier]
          Showmessage('Cool il est la');
         // Traitement du fichier
          [Code du Traitement]
        Except on E:Exception
          Showmessage('zuuuuttt il est pas la !!!');
        end; // trye
      finally
        // ici on libère les compos
      end; // tryf
      // Je passe au traitement suivant
      [code pour passer au fichier suivant]
    end; // While
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    J'ai suivis tes conseils et j'ai retiré le break.
    Maintenant, je gère un boolean dans mon exception qui me permettra par la suite de savoir si je dois exécuter une partie de code ou non.

    Par contre, j'ai un problème avec le CopyFrom, j'ai une erreur de type EReadError 'Stream Read Error'.
    Les fichiers sont créés mais sans contenu.

    Je te joins mon code :

    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
     
            LibServerConfig := False;
            FileName := ExtractFilePath(Application.ExeName) + LibOFML[NbrLib] + '.xml';
     
            Tms := TMemoryStream.Create;
            try
              if FileExists(FileName) then Tms.LoadFromFile(FileName)
              else
              begin
                try
                  IdHTTP1.Get(UrlUpdateWebsite + UrlUpdateConfigFiles + LibOFML[NbrLib] + '.xml',Tms);
                  TFs := TFileStream.Create(FileName,fmCreate);
                  LibServerConfig := True;
                  try
                    TFs.CopyFrom(Tms,Tms.Size);
                  finally
                    TFs.Free;
                  end; // end du try finally TFs := TFileStream.Create(FileName,fmCreate);
                except
                  On e : Exception do  LibServerConfig := False;
                end; // end du except idhht1.get
              end; // end du else de if FileExists(FileName) then Tms.LoadFromFile(FileName)
            finally
              Tms.Free;
            end; // end du try finally de Tms := TMemoryStream.Create;
    Mais quelle bordel !

  17. #17
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Essai çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TFs.CopyFrom(Tms,0);
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par Malatar
    Essai çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TFs.CopyFrom(Tms,0);
    excellent, ca marche!

    Merci du coup de main
    Aurais tu un bon tutorial sur les stream?
    J'ai déjà eu 2 fois l'occasion de travailler avec les streams, mais je dois bien avouer que je n'y comprends pas grand chose
    Il semble pourtant que l'on puisse faire de grandes choses avec (selon les besoins bien sur)
    Mais quelle bordel !

  19. #19
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Mon seul tutorial sur les Stream c'est et de bien lire les instructions sur les commandes
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 213
    Points : 109
    Points
    109
    Par défaut
    Je te remercie mais je suis par moment un peu ... blond
    Et honnetement, je trouve que le documentation de Delphi est moins faite que les versions précédentes
    Mais quelle bordel !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/06/2007, 15h27
  2. [Configuration] problème pour forcer le téléchargement d'un fichier
    Par All Bran dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 02/01/2006, 16h23
  3. XMLHTTPRequest et interception de fichier inexistant
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 06/09/2005, 15h35
  4. Des fichiers inexistants qui existent pourtant !
    Par iubito dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 07/09/2004, 10h29
  5. [MFC] ouverture en lecture d'un fichier inexistant
    Par bigboomshakala dans le forum MFC
    Réponses: 9
    Dernier message: 07/05/2004, 12h42

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