AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Webbroker. PageProducer und transparente HTML-Tags
Thema durchsuchen
Ansicht
Themen-Optionen

Webbroker. PageProducer und transparente HTML-Tags

Ein Thema von Delbor · begonnen am 28. Jun 2016 · letzter Beitrag vom 4. Jul 2016
Antwort Antwort
nahpets
(Gast)

n/a Beiträge
 
#1

AW: Webbroker. PageProducer und transparente HTML-Tags

  Alt 1. Jul 2016, 11:55
Das Ausliefern eines Bildes über eine Webapplikation könnte grob so aussehen:
Delphi-Quellcode:
// PathInfo: /Images
procedure TWebModule1.ImagesAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
Var
  fs : tFileStream;
  sFile : String;
begin
  Try
   // Die Pfadangabe sollte natürlich konfigurierbar sein.
   // Relative Pfade könnten auch möglich sein.
   // Dann gilt aber: Relativ ausgehend von der Webserver.Exe.
   sFile := Format('E:\DelphiXE8%20Corner\DelphiXE8VclCorner\DelborWebserverXE8\DelborDataSnapServer\Images\%s', [Request.QueryFields.Values['Image']]);
   fs := tFileStream.Create(sFile,fmOpenRead);
   Try
    Response.ContentType := 'image/jpeg';
    Response.SendStream(fs);
    Response.SendResponse;
   Except
     On e : Exception Do Response.Content := '<HTML><BODY>' + e.Message + '</BODY></HTML>';
   End;
  Finally
    fs.Free;
  End;
  Handled := True;
end;
Die passende Url dazu würde dann ungefähr so aussehen:
http://localhost:8080/NameDeinerWebanwendung/Images?Image=Delbor_8.jpg Ausgehend von dem oben im Quelltext "festverdrahteten" Pfad, wäre aber auch sowas möglich:
http://localhost:8080/NameDeinerWebanwendung/Images?Image=Logo/Delbor_8.jpg
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Webbroker. PageProducer und transparente HTML-Tags

  Alt 1. Jul 2016, 12:40
Hi zusammen

@Jumpy
Zitat:
Diese Pathinfo ist also gar nicht nötig! Das (nach)laden der Bilder muss automatisch erfolgen!!!
Tut es. zumindest bei einer Webbrokeranwendung, aber nicht. Und so, wie ich das verstehe, ist das gewollt: Webbroker-Anwendungen sind dazu da, Inhalte dynamisch zuzuweisen.
Ich denke, eine nur auf dem IdHTTPServer basierende Anwendung würde dies wohl tun - zumindest habe ich das 'Eliza'-Beispielprogramm der Indys so in Erinnerung.
@nahpets
Ich habe deinen kleinen Test mal umgesetzt. Allerdings habee ich die Datei in 'idextest' umbenannt, da ich selbst eine Datei Index.html habe.
Bei mir sieht das allerdings wohl etwas anders aus, als du beabsichtigt hast. Grund dafür ist, dass ich keinen Webserver (sprich IIS) am laufen habe. Meine Anwendung ist ein Standalone-Webbroker. Und der erzeugt bei Programmstart eine Instanz des IDHTTPServer-Abkömmlings TIdHTTPWebBrokerBridge, ist also eigentlich eine IDHTTPServer-Anwendung.
Der Defaulthandler:
Delphi-Quellcode:
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
if Request.PathInfo = '/html/AufromantischerSpur1.htmlthen
  WebModule1WebActRomanticeRoadAction(Self,Request,Response,Handled);
if Request.PathInfo = '/html/DynamicDelborHome.htmlthen
  WebModule1WebActHomeAction(Self,Request,Response,Handled);
if Request.PathInfo = '/Images/Logo/Delbor_8.jpgthen
  WebModule1WebActImagesAction(Self,Request,Response,Handled);
if Request.PathInfo = '/indextest.htmlthen
  WebModule1WebActindextest(Self,Request,Response,Handled); //<==

end;
WebModule1WebActindextest:
Zitat:
procedure TWebModule1.WebModule1WebActindextest(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.Content := PageProducerIndextest.Content;
end;
Dabei habe ich PageProducerIndextest.HTMLFile auf die IndexTest.html gesetzt.
Und die zeigt mir der Browser dann auch an.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Webbroker. PageProducer und transparente HTML-Tags

  Alt 1. Jul 2016, 12:47
@Jumpy
Zitat:
Diese Pathinfo ist also gar nicht nötig! Das (nach)laden der Bilder muss automatisch erfolgen!!!
Tut es. zumindest bei einer Webbrokeranwendung, aber nicht. Und so, wie ich das verstehe, ist das gewollt: Webbroker-Anwendungen sind dazu da, Inhalte dynamisch zuzuweisen.
Webbroker ist ja glaub ich so ein Delphi-Ding, oder? Was aus der Liste unter dem Link machst du denn jetzt genau?

http://docwiki.embarcadero.com/RADSt...ngen_erstellen
Ralph
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Webbroker. PageProducer und transparente HTML-Tags

  Alt 1. Jul 2016, 12:51
Hi nahpeds
Zitat:
Das Ausliefern eines Bildes über eine Webapplikation könnte grob so aussehen:
Vielen Dank für das Beispiel!

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Webbroker. PageProducer und transparente HTML-Tags

  Alt 1. Jul 2016, 13:05
Hi Jumpy
Ich habe diese Anwendung mit diesem Experten erstellt.
Unter DelphiXE4 Pro hatte ich keine Möglichkeiten, mit Datsnap zu arbeiten und deshalb mit reinen Webbroker-Anwendungen gearbeitet. Dabei hatte ich auch diee Anwendung auch als ISAPI-Projekt zu erstellen versucht, bin aber unter anderem an der Konfiguration des IIS gescheitert. Zurzeit habe ich allerdings den Verdacht, dass dies das kleinste Problem war...

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Webbroker. PageProducer und transparente HTML-Tags

  Alt 4. Jul 2016, 17:28
Hi nahpeds

Delphi-Quellcode:
  Try
   // Die Pfadangabe sollte natürlich konfigurierbar sein.
   // Relative Pfade könnten auch möglich sein.
   // Dann gilt aber: Relativ ausgehend von der Webserver.Exe.
   sFile := Format('E:\DelphiXE8%20Corner\DelphiXE8VclCorner\DelborWebserverXE8\DelborDataSnapServer\Images\%s', [Request.QueryFields.Values['Image']]);
Was genau sollte der Formatstring bewirken?
Abgesehen davon: Es wird nicht ohne relative Pfade gehen. Das Rootverzeichnis meines Webspaces ist'\'.

Gruss
Delbor

PS: Ich hatte eine Fehlermeldung erhalten, die ich zu kopieren vergessen hatte. Die reiche ich jetzt nach:

Zitat:
Im Projekt DataSnapServerApp1.exe ist eine Exception der Klasse EConvertError mit der Meldung 'Format 'E:\DelphiXE8%20Corner\DelphiXE8' ungültig oder nicht kompatibel mit Argument' aufgetreten.
Ich vermute mal, das sind die Backslashes im Pfad.
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor ( 4. Jul 2016 um 17:44 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: Webbroker. PageProducer und transparente HTML-Tags

  Alt 4. Jul 2016, 18:16
Ok, der Fehler in der Formatanweisung liegt in der Pfadangabe.
Delphi-Quellcode:
Try
   // Die Pfadangabe sollte natürlich konfigurierbar sein.
   // Relative Pfade könnten auch möglich sein.
   // Dann gilt aber: Relativ ausgehend von der Webserver.Exe.
   sFile := Format('E:\DelphiXE8 Corner\DelphiXE8VclCorner\DelborWebserverXE8\DelborDataSnapServer\Images\%s', [Request.QueryFields.Values['Image']]);
Die %20 müssen ein Leerzeichen sein, ansonsten stört das % in der Zeichenfolge.

Wenn die Dateien unterhalb Deiner Applikation liegt, geht aus sowohl mit absoluten, als auch mit relativen Pfaden.

Wenn Du in Deinen Webseiten Urls dieser Art benutzt http://localhost:8080/NameDeinerWebanwendung/Images?Image=Delbor_8.jpg , dann kannst Du in Deinem Programm über Request.QueryFields.Values die Werte abfragen, die sich in der Url hinter dem ? und getrennt durch & befinden.

Wenn Du also im Quelltext die Url http://localhost:8080/NameDeinerWebanwendung/Images?Image=Delbor_8.jpg hast, so musst Du im Quelltext bei der WebModule1WebActImagesAction nur Request.QueryFields.Values['WertVorDemGleichheitszeichen'] abfragen und bekommst den Wertes hinter dem Gleichheitszeichen geliefert, hier im Beispiel also für Image den Wert Delbor_8.jpg, und dieser Wert wird oben in der Formatanweisung in den Pfad zu den Dateien eingefügt.
Funktioniert im Prinzip wie bei Ini-Dateien ...

Damit musst Du nicht mehr in einer endlosen If-Kaskade für jedes Bild eine extra Abfrage mache.

Die folgende Routine sollte also für alle JPeg-Dateien funktionieren, die über eine Url der Form http://localhost:8080/NameDeinerWebanwendung/Images?Image=irgendeindateiname.Endung vom Browser bei Deinem Programm angefordert werden.

Delphi-Quellcode:
// PathInfo: /Images
procedure TWebModule1.WebModule1WebActImagesAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
Var
  fs : tFileStream;
  sFile : String;
begin
  Try
   // Die Pfadangabe sollte natürlich konfigurierbar sein.
   // Relative Pfade könnten auch möglich sein.
   // Dann gilt aber: Relativ ausgehend von der Webserver.Exe.
   sFile := Format('E:\DelphiXE8 Corner\DelphiXE8VclCorner\DelborWebserverXE8\DelborDataSnapServer\Images\%s', [Request.QueryFields.Values['Image']]);
   fs := tFileStream.Create(sFile,fmOpenRead);
   Try
    Response.ContentType := 'image/jpeg';
    Response.SendStream(fs);
    Response.SendResponse;
   Except
     On e : Exception Do Response.Content := '<HTML><BODY>' + e.Message + '</BODY></HTML>';
   End;
  Finally
    fs.Free;
  End;
  Handled := True;
end;
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Webbroker. PageProducer und transparente HTML-Tags

  Alt 4. Jul 2016, 20:19
Hi Nahpeds

Vielen Dank für deine ausführliche Antwort!

Mein Konzept - das noch nicht ganz durchgedacht ist - sah Stringlisten, bzw. Name:Wert-Listen vor, um die if-Orgie vermeiden zu könen, aber wenns die Dank der Formatfunktion nicht braucht, umso besser.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  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 09:53 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