AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy HTTPServer: Datei Upload
Thema durchsuchen
Ansicht
Themen-Optionen

Indy HTTPServer: Datei Upload

Offene Frage von "MasterEvil"
Ein Thema von MasterEvil · begonnen am 15. Apr 2009
Antwort Antwort
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#1

Indy HTTPServer: Datei Upload

  Alt 15. Apr 2009, 13:32
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:
-----------------------------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 ...
Als einzigen Hinweis im WWW habe ich bislang TIdMessageCoderMIME gefunden. Auch ein kleines Beispiel hier. Dieses Beispiel ist allerdings noch mit einer älteren Indy-Version als meiner gemacht und funktioniert so nicht. Ich habe bereits einiges umgebaut, so dass ich an den Content komme, dieser ist allerdings fehlerhaft, da irgendwo auf dem Weg in der Datei alle 0D oder 0A zu 0D0A werden. Außerdem bekomme ich über diesen Weg auch die anderen Parameter nicht so raus, da er die Namen der Parameter verwirft.

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:
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;
Gruß,
Steffen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz