I have adapted the HTTPpostFile to allow you to upload the file and form fields together, instead of just the file. If you wish, add it to HTTPSend.pas
function HttpPostFileForm(const URL, FieldName, FileName: string; const Data: TStream; const FormFields:TStrings; const ResultData: TStrings): Boolean; var HTTP: THTTPSend; Bound, s: string; i:integer; const FIELD_MASK = CRLF + '--%s' + CRLF + 'Content-Disposition: form-data; name="%s"' + CRLF + CRLF+ '%s'; begin Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary'; HTTP := THTTPSend.Create; try s := '--' + Bound + CRLF; s := s + 'content-disposition: form-data; name="' + FieldName + '";'; s := s + ' filename="' + FileName +'"' + CRLF; s := s + 'Content-Type: Application/octet-string' + CRLF + CRLF; HTTP.Document.Write(Pointer(s)^, Length(s)); HTTP.Document.CopyFrom(Data, 0); // Include formfield for i:=0 to FormFields.Count-1 do begin S:= Format(FIELD_MASK,[Bound, FormFields.Names[I], FormFields.Values[FormFields.Names[I]]]); HTTP.Document.Write(Pointer(S)^, Length(S)); end; s := CRLF + '--' + Bound + '--' + CRLF; HTTP.Document.Write(Pointer(s)^, Length(s)); HTTP.MimeType := 'multipart/form-data; boundary=' + Bound; Result := HTTP.HTTPMethod('POST', URL); ResultData.LoadFromStream(HTTP.Document); finally HTTP.Free; end; end;
Regards, Eric Paschoalick Chaves