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;