AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TWebModule und Multipart

TWebModule und Multipart

Ein Thema von Hobbycoder · begonnen am 8. Dez 2020 · letzter Beitrag vom 9. Dez 2020
Antwort Antwort
Seite 1 von 2  1 2   
Hobbycoder

Registriert seit: 22. Feb 2017
881 Beiträge
 
#1

TWebModule und Multipart

  Alt 8. Dez 2020, 13:13
Hi,

ich habe einen AppServer als Standalone laufen, in dem ich über TWebModule die entsprechenden Requests auswerte und bearbeite. Die Anfrage werden über eine Webseite, die auf einem anderen Host liegt erzeugt.
Jetzt bin ich auf ein Problem gestoßen. Wenn ich in einem Request ein Picture mitgesendet wird, wird der Request als Multipart geschickt.
Wenn als Method im WebFormular Get verwendet wird, erhalte ich zwar alle Fields, jedoch ist Files.Count immer 0. Das ist ja Okay.
Ändere ich die Method auf Post, ist wird beim Auswerten des Content ein EEncodingError ausgeworfen. Die Daten sind aber im RawContent vorhanden, allerdings natürlich gänzlich anders als bei der Übertragung als GET.
Wie kriege ich es hin, dass der Request richtig geparst wird?
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
387 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: TWebModule und Multipart

  Alt 8. Dez 2020, 14:30
Füge in der Uses Liste deines TWebModul's die Unit "Web.ReqMulti" hinzu. Danach sollte Files abgefüllt sein.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
881 Beiträge
 
#3

AW: TWebModule und Multipart

  Alt 8. Dez 2020, 14:36
Danke. Habe ich bereits drin (hatte das irgendwo gelesen).

Leider ist das Verhalten mit und ohne gleich.

Mittlerweise habe ich herausgefunden, dass es nicht zwingend am POST liegt, sondern an dem Parameter
Code:
enctype="multipart/form-data"
im Form-Tag.
Ohne das enctype wird natürlich auch wieder keine Datei angahängt.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
572 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TWebModule und Multipart

  Alt 8. Dez 2020, 14:40
Wie wird denn das Senden der Datei auf Client-Seite (also der Client aus Sicht deines Delphi-Servers) erzeugt? Hängt da auch irgendein Code hinter, der die Datei sendet? Möglicherweise liegt da das Problem?
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
881 Beiträge
 
#5

AW: TWebModule und Multipart

  Alt 8. Dez 2020, 14:45
Zum Test erst einmal einfach so:

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="hidden" 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.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
881 Beiträge
 
#6

AW: TWebModule und Multipart

  Alt 8. Dez 2020, 14:48
Lasse ich "enctype" weg, springt er mir auch in der Unit Web.ReqMulti in die Procedure "IsMultipartForm", liefert jedoch ein False zurück, weil es ja nicht drin steht.
Wenn enctype="multipart/form-data" jedoch drin ist, testet er gar nicht erst auf IsMultipartForm.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
572 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TWebModule und Multipart

  Alt 8. Dez 2020, 15:26
Sieht jetzt erstmal unspektakulär aus. Macht denn das senddata.php irgendwas spannendes, was zu Problemen führen könnte?
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
387 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: TWebModule und Multipart

  Alt 8. Dez 2020, 15:36
Die Action der Form geht doch da aber auf eine php Seite, also wie soll das dann dein Webmodul erreichen oder fehlt hier noch eine wichtige Info, die du uns hier vorenthälst? Un djam enctype="multipart/form-data" musst du auf jeden Fall verwenden, sonst bekommst du keine Dateidaten.

Das mit dem MultiReq nutzte ich schon länger und das geht ohne Probleme bei mir, nur ist es bei mir eben eine Delphi Webapplikation die das empfängt. Bei dir eine PHP Seite?! Wo kommt da das Webmodul zum Einsatz?

Geändert von Rolf Frei ( 8. Dez 2020 um 15:42 Uhr)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
881 Beiträge
 
#9

AW: TWebModule und Multipart

  Alt 8. Dez 2020, 15:42
"senddata.php" ist einfach nur mein TWebActionItem.PathInfo um unterschiedliche Abfragen ein bischen zu unterscheiden. Hätte auch alles über die DefaultAction laufen können.
Gemacht wird da noch nichts, außer dass ich die Fields auswerte um dann die Daten zu Verarbeiten, bzw. das Response zu erzeugen.

Solange kein Multipart drin ist, hat das auch alles wunderbar geklappt. Jetzt will ich aber auch Bilder empfangen. Zum testen habe ich mir das ganz simple Html-Formular genommen.
Wie klinkt sich denn das ReqMulti ein? Und warum wird das bei enctype="multipart/form-data" ignoriert?

Ist denn enctype="multipart/form-data" richtig für Formulare mit File-Upload?
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
387 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: TWebModule und Multipart

  Alt 8. Dez 2020, 16:26
Das mit php kannst du natürlich so machen, nur ist das sehr verwirrend, weil das wie ein PHP Server ausieht, es aber garnicht ist. Natürlich ist es korrekt nicht alles über das default Action zu machen, nur würde ich da halt die PathInfo auf "/upload" oder soaws setzen und nicht etwas vorgaukeln was nicht ist. Die Action wärer dann z.B. so: http://localhost:8443/upload. Das hat aber nun mal nichts mit deinem Problem zu tun, sondern ist nur eine Bemerkung meinerseits.

Ich nutze das aber etwas anderst als du, da ich für den Upload ein JS Plugin (https://www.plupload.com) nutze. Da werden die Dateien separat an eine spezielle Upload URL meiner Webapplikation geschickt. Bei dieser fileupload Action erhalte ich dann alle Dateien über Request.Files[i]. Ich mache das also nicht wie du mit einer einzelnen Form und einem input type "file". Die Form schickt nur die Formulardaten und das Plugin schickt die Dateien separat an eine andere URL, als die Formulardaten. Das enctype="multipart/form-data" braucht mein Formular daher auch nicht.

Ob das also überhaupt so funktioniert mit einer Form und einem Input type "file", müsste ich selber mal testen. Für meinen Fall war es aber so, dass gewünscht wurde, dass der Kunde mehrere Dateien hochladen kann und das wäre mit einer simplen Form nicht mehr machbar gewesen.

In deinem Fall mit einer einzlnen Form müsste aber auf jeden Fall enctype="multipart/form-data" bei der Form gesetzt sein.

Geändert von Rolf Frei ( 8. Dez 2020 um 16:34 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 01:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf