![]() |
Indy HTTPServer: Datei Upload
Hallo,
ich habe einen Webserver mittels IdHttpServer (Indy 10). Dieser soll es nun auch ermöglichen Dateiuploads von der Website aus zu tätigen (Anhänge zu einer E-Mail hinzufügen). Auf der Website habe ich also ein <input type=file> und dem IdHttpServer gebe ich im Event CreatePostStream einen PostStream mit. Nun landet auch der gesamte POST-Content in diesem Stream. Leider aber als MIME multipart. So habe ich zum einen die Werte meiner sonstigen Parameter nicht mehr (ARequestInfo.Params ist leer) und zum Anderen komme ich auch nicht so leicht an die Datei die hochgeladen wurde. Ein Beispiel für den POST-Content:
Code:
Als einzigen Hinweis im WWW habe ich bislang TIdMessageCoderMIME gefunden. Auch ein kleines Beispiel
-----------------------------22813951414309'#$D#$A'Content-Disposition: form-data; name="receive"'#$D#$A#$D#$A'dfsddf'#$D#$A'-----------------------------22813951414309'#$D#$A'Content-Disposition: form-data; name="receivecc"'#$D#$A#$D#$A#$D#$A'-----------------------------22813951414309'#$D#$A'Content-Disposition: form-data; name="receivebcc"'#$D#$A#$D#$A#$D#$A'-----------------------------22813951414309'#$D#$A'Content-Disposition: form-data; name="subject"'#$D#$A#$D#$A#$D#$A'-----------------------------22813951414309'#$D#$A'Content-Disposition: form-data; name="text"'#$D#$A#$D#$A#$D#$A'-----------------------------22813951414309'#$D#$A'Content-Disposition: form-data; name="file"; filename="Adresse.pdf"'#$D#$A'Content-Type: application/pdf'#$D#$A#$D#$A'%PDF-1.4 ...
![]() Ich frage mich, ob nicht schon viele andere dieses Problem gehabt haben müssen. Im Netz ist nur leider nichts konkretes zu finden. Ich hoffe jemand von euch weiß Rat, dafür muss es doch eine Lösung geben ... Hier noch mein bisheriger Code:
Delphi-Quellcode:
Gruß,
procedure CHttpServer.ParseMimeRequest(Stream: TStream; Params: TStrings; ContentType: String; UserId: Cardinal);
var MsgEnd : Boolean; Decoder : TIdMessageDecoder; Tmp : String; Dest : TIdStreamVCL; IdStream : TIdStreamVCL; begin MsgEnd:=false; Stream.Position:=0; IdStream:=TIdStreamVCL.Create(Stream); Decoder:=TIdMessageDecoderMIME.Create(nil); try TIdMessageDecoderMIME(Decoder).MIMEBoundary:=TIdMIMEBoundary.FindBoundary(ContentType); Decoder.SourceStream:=IdStream; Decoder.FreeSourceStream:=false; Decoder.ReadLn; repeat Decoder.Headers.Clear; Decoder.ReadHeader; case Decoder.PartType of mcptAttachment: begin Tmp:=ExtractFileName(Decoder.FileName); Dest:=TIdStreamVCL.Create(TMemoryStream.Create,true); try Decoder.ReadBody(Dest,MsgEnd); if Decoder.FileName<>'' then begin AddAttachment(UserId,TMemoryStream(Dest.VCLStream)); end; finally FreeAndNil(Dest); end; end; end; until (Decoder=nil) or MsgEnd or (Stream.Position>=Stream.Size); finally FreeAndNil(Decoder); end; end; Steffen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz