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:

  1.  
  2. uses IdTCPConnection,
  3.  IdTCPClient,IdHTTP,IdMultipartFormData;
  4.  
  5.  
  6. function TdmHTTP.fileProtocolRequest(URL,file_type,nome_file_completo,nome_file_relativo,cod_azienda:String;FileSize:Integer = -1):String;
  7. Var
  8.  TS:TStringList;
  9.  SS:TStringStream;
  10.  Stringazza:String;
  11.  FS:TFileStream;
  12.  MultiPartFormDataStream:TIdMultiPartFormDataStream;// TMsMultiPartFormDataStream;
  13.  ResponseStream:TMemoryStream;
  14. begin
  15.  
  16.  Result:= ‘-1′;
  17.  IdHTTP.Request.Clear;
  18.  IdHTTP.Port:= 80;
  19.  if pos(‘:8080′,URL) >0 then
  20.   IdHTTP.Port:= 8080;
  21.  if pos(‘:8081′,URL) >0 then
  22.   IdHTTP.Port:= 8081;
  23.  
  24.  MultiPartFormDataStream:= TIdMultiPartFormDataStream.Create;
  25.  ResponseStream:= TMemoryStream.Create;
  26.  MultiPartFormDataStream.AddFile(‘allegato’,nome_file_completo,‘pdf’);
  27.  
  28.  TS:= TStringList.Create;
  29.  SS    := TStringStream.Create();
  30.  Try
  31.   Try
  32.    // tramite questa tecnologia possiamo comunque usufruire dei parametri via url da passare al servizio che risponderà alla ns chiamata
  33.    URL:= URL + ‘?username=’ + username + ‘&password=’ + password ;
  34.    SS.Position:= 0;
  35.    Try
  36.     // la classe TidHTTP prevede un overload del metodo post che accetta come parametro il ns MultiPartAttchment
  37.     Stringazza:= IdHTTP.Post(URL,MultiPartFormDataStream);
  38.    Except
  39.     On E:Exception do
  40.      Result:= E.Message;
  41.    End;
  42.    If SS <>nil then
  43.     Result:= Stringazza;// SS.DataString;
  44.   Except
  45.   End;
  46.  Finally
  47.   Try TS.FRee;except end;
  48.   Try SS.Free;except end;
  49.  End;
  50. end;
  51.  

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:

Leave a Reply

Connect with Facebook

  

  

  

You can use these HTML tags

<a href=""title=""><abbr title=""><acronym title=""><b><blockquote cite=""><cite><code><del datetime=""><em><i><q cite=""><strike><strong>