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

TidHTTPServer decode content type multipart/form-data

TidHTTPServer decode content type multipart/form-data

Come tutti sappiamo, creare un webServer con Delphi è semplicissimo, cosa meno banale è invece decodificare una post che che contiene un multipart/form-data.
Quando una paginetta http esegue una http submit da un form in metodo post, magari con un file in upload il browser genera uno stream codificato in UTF8 in cui ci sono tutti i parametri e tutti gli allegati.
Il nostro server HTTP riceve tale stream nella variabile ARequestInfo.PostStream nell’evento “onCommandGet” (non bisogna farsi forviare dal nome, qualsiasi sia il metodo http utilizzato questo evento viene scatenato lato server).
Ora come maneggiare questa informazione è tutt’altro che banale, o si parsa lo stream tenendo conto degli standard RFC.
Personalmente ho utilizzato una classe già presente in Delphi nella tool dei componenti Indy che è nata per parsare stream molto simili : quelli MIME dei mesaggi di posta (son la stessa cosa alla fine).

Di seguito un esempio, il codice del comando onCommandGet l’ho implementato che restituisce una paginetta Http con un form per uploadare un file se viene chiamata la base path, quando invece viene chiamato basepath/upload gestisce la post del suddetto form.

L’esempio che riporto di seguito, salva lo stream con il nome file che gli arriva dal browser su un file nella cartella dell’applicazione. Ovviamente questo è un codice di esempio, se dovete implementare il webserver per un uso professionale bisogna considerare che è multi thread quindi le operazioni andrebbero sincronizzate con il thread principale, se non lo fate rischiate che si inchiodi prima o poi.

Tools : Delphi XE5 e Indy 10

E ora il codice:

Lascia un commento