![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 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