[Delphi] Download programmato documento da indirizzo Web.

Nei nostri programmi spesso ci capita di dover scaricare, da internet e con cadenza programmata, dei file ed aggiornare quelli presenti sul nostro computer. La soluzione più semplice, oltre a quella di collegarci sul sito di riferimento ed effettuare manualmente il download, sarebbe quella di inserire sulla nostra applicazione un’opzione di auto aggiornamento.

Delphi ci permette di accedere all’API WinInet, tramite quest’ultima possiamo connetterci e scaricare file da qualsiasi sito web che utilizza protocolli HTTP (HyperText Transfer Protocol) o FTP (File Transfer Protocol).

Per quanto riguarda il download di file da internet, procediamo come segue:

  1. inseriamo fra le uses l’API che andremo ad utilizzare: WinInet;
    uses WinInet;
  2. creiamo una funzione per il download del file;
    function GetInetFile(const fileURL, FileName: String):boolean;
    const
      BufferSize=1024;
    var
      hSession, hURL:HInternet;
      Buffer: array[1..BufferSize] of Byte;
      BufferLen: DWORD;
      f:File;
      sAppName: string;
    begin
      result :=false;
      sAppName := ExtractFileName(Application.ExeName);
      hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
      try
        hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
        try
          AssignFile(f, FileName);
          Rewrite(f, 1);
        repeat
          InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
          BlockWrite(f, Buffer, BufferLen)
        until BufferLen = 0;
          CloseFile(f);
          result := true;
        finally
          InternetCloseHandle(hURL)
        end
      finally
        InternetCloseHandle(hSession)
      end
    end;
  3. richiamiamo la funzione per scaricare il file.
    Scegliamo il componente da inserire sulla form, generalmente viene utilizzato un TTimer, doppio click ed inseriamo il codice per chiamare la funzione per il download:
    var
      s: string;
    const
      internet: string = ‘indirizzo_internet’;
    begin
      if GetInetFile(internet, s) then
        ShowMessage(’File scaricato con successo’);
      else
        ShowMessage(’Errore: il file non è stato scaricato.’);
    end;

Lascia una Risposta

Devi aver fatto il login per inviare un commento