Via Cà Matta 2 - Peschiera Borromeo (MI)
+39 02 00704272
info@synaptica.info

Delphi Tips – multipart attachment IndyHTTP

Digital Innovation Partner

Delphi Tips – multipart attachment IndyHTTP

Tramite la struttura dei multipart attchment via HTTP è possibile inviare o ricevere uno o più stream binari tramite una POST http, questa tecnologia è stata indtrodotta sulla scia dei protocolli per la gestione degli allegati multipli alla mail, ovviamente come core di tutto ciò c’è il ns amico TCP/IP, ma con il layer di astrazione dei multipart la vita del programmatore diciamo che si semplifica notevolmente.
Vediamo un piccolo esempio di questa usatissima tecnologia applicandola a Delphi e ai componenti standard di comunicazione messi a disposizione con questo ambiente di sviluppo.

Nell’esempio che segue faremo una post tramite un client idHTTP includendo un file in una richiesta HTTP :

uses IdTCPConnection,
  IdTCPClient, IdHTTP,IdMultipartFormData;


function TdmHTTP.fileProtocolRequest(URL, file_type, nome_file_completo, nome_file_relativo,cod_azienda : String; FileSize : Integer = -1): String;
Var
 TS : TStringList;
 SS : TStringStream;
 Stringazza : String;
 FS : TFileStream;
 MultiPartFormDataStream: TIdMultiPartFormDataStream;// TMsMultiPartFormDataStream;
 ResponseStream: TMemoryStream;
begin

  Result := '-1';
  IdHTTP.Request.Clear;
  IdHTTP.Port := 80;
  if pos(':8080',URL) > 0 then
    IdHTTP.Port := 8080;
  if pos(':8081',URL) > 0 then
    IdHTTP.Port := 8081;

  MultiPartFormDataStream := TIdMultiPartFormDataStream.Create;
  ResponseStream := TMemoryStream.Create;
  MultiPartFormDataStream.AddFile('allegato',nome_file_completo,'pdf');

  TS := TStringList.Create;
  SS       := TStringStream.Create('');
  Try
    Try
      // tramite questa tecnologia possiamo comunque usufruire dei parametri via url da passare al servizio che risponderà alla ns chiamata
      URL := URL + '?username=' + username + '&password=' + password ;
      SS.Position := 0;
      Try
        // la classe TidHTTP prevede un overload del metodo post che accetta come parametro il ns MultiPartAttchment
        Stringazza := IdHTTP.Post(URL,MultiPartFormDataStream);
      Except
        On E:Exception do
         Result := E.Message;
      End;
      If SS <> nil then
       Result := Stringazza;// SS.DataString;
    Except
    End;
  Finally
   Try TS.FRee; except end;
   Try SS.Free; except end;
  End;
end;

l’esempio appena portato può essere fruito da qualsiasi sistema che accetti chiamate HTTP, quindi potremmo avere dall’altra parte una Servlet JAVA , un server WEB di qualsiasi compagnia che richiede tale struttura di dato oppure ancora un server da voi sviluppato con Delphi tramite il componente TidHTTPServer.

Vediamo ora la parte server:

Tags: , , , , ,

Lascia un commento