Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi http server & stream... (https://www.delphipraxis.net/124589-http-server-stream.html)

seppi.tm 21. Nov 2008 14:00


http server & stream...
 
hallo habe mal ne frage zu meinem Programm code ich habe auf on command.get bei meinem idhttp folgendes:

Delphi-Quellcode:
...
var
pic:tbitmap;
picj:tjpegimage

...

 pic:=pic.Create;

 imagelist1.GetBitmap(strtoint(jvlistview1.Items.Item[strtoint(Arequestinfo.Params.Text)].SubItems[1])-1,pic);
 picj.Assign(pic);
 picj.SaveToFile('c:\tmp'+Arequestinfo.Params.Text);
 AResponseInfo.ContentType:='image/jpeg';
 AResponseInfo.ContentStream:=TfileStream.Create('c:\tmp'+Arequestinfo.Params.Text, fmOpenRead + fmShareDenyWrite);
 try
 deletefile('tmp'+Arequestinfo.Params.Text);
 except
 end;
das document auf das man zugreift ist picture.jpg?1

aber im Browser stehen immer nur Fehler oder halt das Dokument (also nen text mit: "http://localhost/picture.jpg?1") was mache ich hier falsch wie mache ich es das er das bild anzeigt?

jfheins 21. Nov 2008 14:31

Re: http server & stream...
 
Hast du mal versucht, das Bild nicht sofort wieder zu löschen?

Alternativ: Nicht als Datei speiochern, sondern als MemoryStream, und den dann irgendwann später freigeben ...

seppi.tm 23. Nov 2008 09:08

Re: http server & stream...
 
Ja als memorystream wäre mir eh lieber aber naja dann macht er auch nichts ... das geht halt auch nicht ^^ woran kann das liegen?

seppi.tm 23. Nov 2008 09:40

Re: http server & stream...
 
Danke für eure hilfe die idee mit dem memorystream war gut hier meine lösung:

Delphi-Quellcode:
...
var
  pic:Tbitmap;
  picj:Tjpegimage;
  str:Tmemorystream;
...

    //Objekte erstellen
    pic:=tbitmap.Create;
    str:=tmemorystream.Create;
    picj:=TJPEGImage.Create;
    picj.CompressionQuality:=100;

try
      //Bild auslesen und in jpg umwandeln
      imagelist1.GetBitmap(strtoint(jvlistview1.Items.Item[strtoint(trim(Arequestinfo.Params.Text))].SubItems[1])-1,pic);
      picj.Assign(pic);
      picj.SaveToStream(str);

        //ImageHeader und bild übergeben
        AResponseInfo.ContentType:='image/jpeg';
        AResponseInfo.ContentStream:=str;

finally
        //FREEEEE!!!einself
        pic.Free
        str.Free
        picj.Free
end;

SirThornberry 23. Nov 2008 10:34

Re: http server & stream...
 
Und das funktioniert? Kann ich mir gar nicht vorstellen da du den Stream ja wieder frei gibst und somit nach zurückkehren der Methode der Stream gar nicht mehr verfügbar ist und somit auch nichts versendet werden kann.
Du solltest den Stream in der Methode anlegen (kann auch eine lokale Variable sein) aber NICHT freigeben. Darum kümmert sich die http-Komponenten wenn der Stream vollständig versendet wurde.

seppi.tm 23. Nov 2008 13:16

Re: http server & stream...
 
Ja ^^ das habe ich auch wieder rausgenommen ^^ habe ich auch gemerkt^^

inherited 23. Nov 2008 14:20

Re: http server & stream...
 
Ich glaube du brauchst noch nichtmal ein (jpeg)-Bild. Es reicht das Bild einfach in einen Filestream zu laden und den zu übergeben.
Was das für eine Art von Bild ist, interessiert den Server wenig.

Edit: Ich sehe gerade, du holst die aus einer ImageList. Vielleicht sollte man das dann eher in einer ObjectList in Streams speichern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 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