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![]()
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 !
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
En faite, en reprenant l'exemple de la FAQ
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
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;![]()
Mais quelle bordel !
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 :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
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 !
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 :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
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.Envoyé par Malatar
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 !
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 :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
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 !
Est ce que tu as mis HandleRedirect à True ?
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
Oui, j'ai bien suivis ce que tu disais et le maximum est bien sur 15
Mais quelle bordel !
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é.
Autre question, j'avoue avoir du mal avec les stream ... mon code est correct?
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;
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 !
Tout depend de comment tu as programmé ton code.Envoyé par davels
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)Envoyé par davels
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 CopyFromEnvoyé par davels
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 :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
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.Envoyé par Malatar
A mon avis, je dois plus insérer les mes controles dans des tests.
Merci pour le copyFrom![]()
Mais quelle bordel !
Fait voir le code de ta boucle en complet.Envoyé par davels
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 :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
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 !
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 :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
Envoyé par Malatar
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 !
Mon seul tutorial sur les Stream c'estet de bien lire les instructions sur les commandes
![]()
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
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 !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager