![]() |
http server & stream...
hallo habe mal ne frage zu meinem Programm code ich habe auf on command.get bei meinem idhttp folgendes:
Delphi-Quellcode:
das document auf das man zugreift ist picture.jpg?1
...
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; 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? |
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 ... |
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?
|
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; |
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. |
Re: http server & stream...
Ja ^^ das habe ich auch wieder rausgenommen ^^ habe ich auch gemerkt^^
|
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