![]() |
Eine textdatei zum Browser zurück geben
Hi ,
neben den JSON Strings aus diversen Records muss ich jetzt auch textdateien an den Browser zurückliefern. Muss ich die irgendwie in "Response.Contend" einlesen und dann mit Response.ContentType:= text/plain den Typ festlegen? Oder geht da was mit nem Stream? Und wenn ja, wie? Ihr seht schon, kein Plan von dem Internetzeuch. Danke für Hilfe Charly |
AW: Eine textdatei zum Browser zurück geben
Hast du das, was du da schreibst, einfach mal probiert? Das ist schon mal nicht komplett falsch.
Und angeben, welches Framework du benutzt, wäre hilfreich. Indy? |
AW: Eine textdatei zum Browser zurück geben
Ich benutze das was Delphi 10.4 Community mir liefert, wenn ich File/new/other/delphi/Web/WebServer Application auswähle.
Delphi-Quellcode:
aber wie es weiter geht ist unklar wenn ich eine bestimmte Datei zurück geben möchte.
procedure TWebModule1.WebModule2GET_A_DatenAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin |
AW: Eine textdatei zum Browser zurück geben
Bei Dateien müsste das über FileStreams gehen (ungetestet hingedaddelt):
Delphi-Quellcode:
var
fs : tFileStream; begin fs := tFileStream.Create('ZuSendendeTextDatei.txt',fmOpenRead); try Response.ContentType := 'text/plain'; Response.ContentLength := fs.Size; Response.SendStream(fs); Response.SendResponse; finally fs.Free; end; Handled := True; end; |
AW: Eine textdatei zum Browser zurück geben
Bei allen textbasierten Antworten (Textdateien, HTML usw.) sollte man unbedingt bei Content-Type auch den Zeichensatz angeben, da der Browser sonst Zeichen außerhalb von ASCII falsch darstellt oder im Falle von UTF-16 die Anfrage herunterladen möchte statt sie anzuzeigen:
Code:
Zeichensatzangaben sind nach IANA nicht case-sensitive.
Content-Type: text/plain; charset=utf-8
|
AW: Eine textdatei zum Browser zurück geben
Es klemmt immer noch!
Hier mal mein Stück Code. Es ist von einem Vortrag von Danny Wind vom SummerCamp2021 abgeleitet. Das Ganze ist eine WebServerApplication (stand-alone webserver) Ich habe ein WebModule mit diversen WebModule.Actions und u.a. folgendem Code
Delphi-Quellcode:
mit dem code von Delphi.Narium bekomme ich jetzt im Debugger die Fehlermeldung
procedure TWebModule1.WebModule1waiGET_ReportsAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin Do_GET_ReportsAction(Sender,Request, Response, Handled); end; procedure TWebModule1.Do_GET_ReportsAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var lRKey : string; fs : TFileStream; i : Integer; s : String; begin lRKey:= Get_Param(Sender, Request); if (lRKey.IsEmpty) then //No Report-no param. as URL Params nor URL Segment for GET request begin Handled:= False; //do default handler end else begin //param gefunden //https://wiki.selfhtml.org/wiki/MIME-Type Response.ContentType := 'text/plain; charset=' + TEncoding.UTF8.MIMEName; if TMonitor.Enter(gLock, 500) then {al short lock was possible} begin try //try to return the selected Report s:= 'meinetextdatei'; fs:= TFileStream.Create(s, fmOpenRead); i:= fs.Size; Response.ContentLength := fs.Size; Response.SendStream(fs); Response.SendResponse; finally TMonitor.Exit(gLock); end; end; // if (lValue.IsEmpty) then {no Data found} // begin // //{"error":"Item not found"} // Response.Content := '{"error":"Item not found"}'; // end // else // begin // Response.Content := lValue; // end; Handled := True; end; end; //of Do_GET_ReportsAction() Zitat:
Jeweils aufgerufen mit dem Rest Debugger mit folgender URL ![]() Ich hoffe jetzt auf ne richtig gute Idee! Danke Charly |
AW: Eine textdatei zum Browser zurück geben
Zitat:
Ich würde mal WireShark ankurbeln und mir die Verbindung die scheitert angucken um zu erfahren woran es liegt. |
AW: Eine textdatei zum Browser zurück geben
Und müsste der FileStream nicht auch wieder freigegeben werden?
|
AW: Eine textdatei zum Browser zurück geben
Ergänzung:
Habe in der Doku gefunden, daß die Reihenfolge anders sein muss als ich von Delphi.Narium übernommen habe:
Delphi-Quellcode:
Dann bekomme ich im Browser schon mal ein 200 OK.
Response.ContentLength := fs.Size; 1.
Response.SendStream(fs); 3. <------- muss man Response.SendResponse; 2. <------- vertauschen. Aber was muss ich machen, um den Dateiinhalt im Browser auch angezeigt zu bekommen. Und gibt es zu diesen Themen nicht irgendwas generelles zu lesen oder als Video? Charly |
AW: Eine textdatei zum Browser zurück geben
Zitat:
![]() ![]() Bis bald... Thomas |
AW: Eine textdatei zum Browser zurück geben
Zitat:
Scheint irgendwie rar zu sein. Habe die ganzen Delphi Beispiele nach "SendStream" durchsucht und finde gerade mal ein Projekt PhotoWall.groupproj. Aber da sieht es wieder ganz anders aus. Und SendResponse gibt genau 0 mal. Charly |
AW: Eine textdatei zum Browser zurück geben
Zitat:
Das dürfte in der Regel HTML sein. Was genau funktioniert jetzt nicht, was genau passiert? Wie verhält sich der Browser? HTTP-Code 200 heißt erstmal nur, dass die Anfrage ok war. Das gilt auch für Bilder, MP3, MP4, Zip, Exe, PDF, ..., sofern die Anfrage erfolgreich war und der Browser (der Client) vom Webserver eine Antwort erhält. Das heißt aber nicht, dass der Browser mit den gelieferten Daten irgendwas anfangen kann. HTML wird in der Regel angezeigt. Je nach Konfiguration wird bei den Dateitypen, mit denen der Browser von Haus aus nichts anfangen kann, ein Dialog angezeigt, in dem man auswählen kann, mit welcher Software die Anzeige erfolgen soll. Alternativ kann man auswählen, dass die Datei gespeichert wird. Hier wir regelmäßg das Defaultverzeichnis bzw. das von den Anwendern konfigurierte Downloadverzeichnis genommen. Und wenn man in dem Auswahldialog einmal angehakt hat, dass die getroffene Auswahl für den entsprechnden Dateityp gespeichert werden soll, so werden in Zukunft alle Dateien vom entsprechenden Dateityp mit der konfigurierten Software geöffnet bzw. immer gespeichert. Auf Serverseite hast Du da absolut keinen Einfluß drauf. |
AW: Eine textdatei zum Browser zurück geben
Wenn der Quelltext so ist, wie oben geschrieben, ist der MIME-Typ drin. Der Browser kann plain/text.
Was macht der Browser denn? Runterladen? Leere Seite? |
AW: Eine textdatei zum Browser zurück geben
Zitat:
Response.ContentType:= 'text/plain; charset=utf-8'; Zitat:
Wie kann ich feststellen, ob der Server was geschickt hat? Ich bin nämlich nicht sicher ob meine Serverseite überhaupt korrekt ist und was abschickt. Code siehe Antwort #6 Und eine weitere Frage: Kann ich überhaupt eine Textdatei im Server so verschicken, daß sie im Browser direkt angezeigt wird? Ich habe da echt keinen Plan. Ist alles totales Neuland. Ein Link zu einem Beispiel oder nem Tutorial wäre toll, habe bisher nicht gefunden, was mir geholfen hat. Danke Charly Danke für |
AW: Eine textdatei zum Browser zurück geben
Zitat:
Woher weißt Du, dass beim Browser 200 OK ankommt? Gibt es da weitere Infos zu sehen, wie Größe, Typ, Methode, Host, ...? Bei 200 OK funktioniert die Kommunikation schonmal, die Frage ist, was macht der Browser mit dem Ergebnis? Welchen Browser nutzt Du? Poste bitte den Code Deiner Routine, wie sollen wir sonst herausfinden können, wo da eventuell ein Fehler liegen könnte? |
AW: Eine textdatei zum Browser zurück geben
Zitat:
Zitat:
Zitat:
Danke Charly |
AW: Eine textdatei zum Browser zurück geben
Oh Wunder!!!!
Im Edge bekomme ich jetzt meine Daten zusehen. Im RestDebuger bekomme ich (no response) und einen Fehlerton? Das mit dem 200 ok war im Firefox Charly |
AW: Eine textdatei zum Browser zurück geben
Es wird immer verworrener!
Die 200 ok Rückmeldung kommt nur wenn ich bei einem StanaloneServe anfrage. Aber auf allen 3 Browsern. Edge Crome und FF. Wenn ich die Anfrage zu einer identischen ISAPI-DLL auf einem IIS unter Win 10 Desktopn schicke geht es. Ich bekomme den Dateiinhalt im Browser zu sehen. Verzweifel Charly |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:28 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