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:

