Thema: Delphi TWebModule und Multipart

Einzelnen Beitrag anzeigen

Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#16

AW: TWebModule und Multipart

  Alt 9. Dez 2020, 12:42
Danke für eure Hilfe.

ich habe jetzt noch mal eine ganz neues Projekt aufgesetzt (als Standalone), ReqMulti hinzugefügt, und der Fileupload funktioniert schon mal. Insofern muss ich wohl suchen, warum das in der eignetlichen Anwendung nicht der Fall ist.

Zwei Fragen habe ich aber noch.
1. Jetzt Frage ich ab, ob Request.Files.Count>0 , um festzustellen ob es eine Multipart-Response ist. Gibt es dafür noch einen eleganteren Weg, oder ist das schon die einige Methode?

2. Solange als Method="post" übertragen wird, kann ich zwar die Files abfragen, aber meine QueryFields sind immer leer (obwohl ich alle Parameter im Content finden kann). Erst wenn ich als Method Get verwende, wird QueryFields auch gefüllt.
Es wäre aber schon gut, wenn ich im Post auch die anderen Felder, die das Web-Formular mit überträgt (und sie sind doch im Content enthalten), auch auslesen könnte. Ich könnte mir zwar einen eigenen Parser schreiben, aber sollte das nicht
direkt funktionieren?

Hier mal die Action im Webmodule:
Delphi-Quellcode:
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  datatype: string;
  content: string;
begin
  Response.Content :=
    '<html>' +
    '<head><title>Webserver-Anwendung</title></head>' +
    '<body>Webserver-Anwendung</body>' +
    '</html>';
  if Request.Files.Count > 0 then
  begin
    with TFileStream.Create('C:\OrderApp\' + Request.Files[0].FileName, fmCreate) do
    try
      CopyFrom(Request.Files[0].Stream, Request.Files[0].Stream.Size);
    finally
      Free;
    end;
  end;
  with TStreamWriter.Create(TFileStream.Create('C:\OrderApp\Query.txt', fmCreate), TEncoding.UTF8) do
  try
    content:=Request.Content;
    datatype:=Request.QueryFields.Values['DataType'];
    Write(datatype);
    Write(content);
    Flush;
    Close;
  finally
    BaseStream.Free;
    Free();
  end;
end;
Und hier mal die html-seite mit der ich testweise den Upload mache:
Code:
<html>
    <head>
        <meta charset="utf8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
   
    </head>
    <body>
        <form id="myForm" action="http://localhost:8443/senddata.php" method="post" enctype="multipart/form-data">
            <input type="text" name="DataType" value="fileupload">
            <input type="file" size="120" name="myfile">
            <input type="text" size="20" name="mimetype" value="image/bmp">
            <input type="submit" value="upload">
        </form>
    </body>
</html>
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder ( 9. Dez 2020 um 12:44 Uhr)
  Mit Zitat antworten Zitat