Télécharger un fichier par Inet


Contenu du snippet

Uses InetCtlsObjects_TLB { voir les commentaires }; 

{ renvoie tout ce se trouve après le dernier "/" }  
Function ExtractUrlFileName(Const aUrl: String): String;  
Var 
{$ifdef  ver200} 
    Ptr : PWord; 
{$else}  
    Ptr : PByte; 
{$endif} 
    I, Lng :  Integer; 
Begin 
  Result := aUrl;  
  Lng := Length(aUrl); 
  Ptr := @Result[Lng]; 
  For I := Lng Downto  1 Do 
  Begin  
    If Ptr^ = $2F Then Break; 
    Dec(Ptr); 
  End; 
  Inc(Ptr); 
  Result := Pchar(Ptr);  
End; 
{  Télécharge "Source" vers "Dest" avec INet
  si "Dest" est vide c'est le nom de fichier  
  contenu dans "Source" qui est utilisé } 
Function DownloadFileFromUrl(Const Source: String; Var Dest:  String): Boolean; 
Type 
  TBArray = Array Of  byte; 
Var aByteBuffer:  olevariant; 
    p: pointer; 
    I: Cardinal; 
Begin 
  Result := True; 
  With TInet.Create(Nil) Do 
  Try 
    Try  
      AccessType := icUseDefault; 
      Protocol := icHTTP;  
      aByteBuffer := OpenURL(OLEVariant(Source), icByteArray);  
      While StillExecuting Do ; 
    Except  
      Result := False; 
      Exit; 
    End; 
  Finally  
    Free; 
  End;  
  With TMemoryStream.Create Do 
  Try 
    Try 
      I :=  VarArrayHighBound(aByteBuffer, 1)+1; 
      DynArrayFromVariant(P, aByteBuffer,  TypeInfo(TBArray)); 
      WriteBuffer(P^, I); 
      If Dest = '' Then 
        Dest := ExtractUrlFileName(Source);  
      SaveToFile(Dest); 
    Except  
      Result := False; 
    End; 
  Finally  
    Free; 
    aByteBuffer := Unassigned;  
    DynArrayClear(P, TypeInfo(TBArray)); 
  End; 
End;  
{ Utilisation } 
Procedure Tfrm_Main.btn_TestINetClick(Sender:  TObject); 
Var aDest: String; 
Begin  
  aDest := ''; 
  If DownloadFileFromUrl('http://www.delphifr.com/gdi/c/45850.cs.jpg', aDest) Then 
    ShowMessagefmt('Le  téléchargement de %s a réussit', [aDest]) 
  Else 
    ShowMessagefmt('Le  téléchargement de %s a échoué', [aDest]); 
End; 

Compatibilité : Delphi 5

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.