AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Bitmap an Formular senden mit Indy
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap an Formular senden mit Indy

Ein Thema von schwarzerlotus · begonnen am 11. Feb 2013 · letzter Beitrag vom 14. Feb 2013
Antwort Antwort
schwarzerlotus

Registriert seit: 25. Jul 2011
22 Beiträge
 
#1

Bitmap an Formular senden mit Indy

  Alt 11. Feb 2013, 17:40
Hallo zusammen,

ich möchte aus meinem Programm ein cgi Formular ausfüllen und damit ein Bild sowie ein paar Textfelder übertragen.

Unter D7 wurde das ganze mit einer abgewandelten HTTP Komponente gemacht - nun unter XE2 möchte ich das mit den Indy Komponenten machen.

Das ganze klappt auch soweit schon ganz gut, jedoch muss ich noch mein Bild abspeichern und es dann mit AddFile hinzufügen.

Delphi-Quellcode:
Strm := TIdMultipartFormDataStream.Create;
Strm.AddFormField('ac','test');
Strm.AddFormField('prob','test test');
Strm.AddFile('file', 'C:\Bilder\testimage.jpg', 'image/jpg');
Da ich die Bilder, die ich versenden möchte, intern als Bitmap halte möchte ich nun wie gesagt ungern diese erst abspeichern müssen.

Daher habe ich versucht das Bild als Stream zu übertragen, so wie es auch schon mit den D7 Komponenten gemacht wurde.

Delphi-Quellcode:
bildstream := TMemoryStream.Create();
Image1.Picture.Bitmap.SaveToStream(bildstream);
Strm.AddObject('file', 'image/jpg', '', bildstream, 'image.jpg');
oder über

strm.AddFormField('file', 'image/jpg', '', bildstream, 'image.jpg'); beides führt jedoch dazu, dass das Formular mit

Error: Datei 'image.jpg' konnte nicht hochgeladen werden !

bzw.

nur Dateien der typen .bmp, .gif, .jpg, .kib, .png, .psd, .tga, .tif und .zip können hochgeladen werden

antwortet.

Wenn ich Wireshark richtig interpretiere wird bei den letzten beiden Aufrufen mit Hilfe des Streams der Inhalt des Bildes auch nicht mit übertragen.

Kann mir einer sagen was ich hier falsch mache?

Der Aufruf von AddFile läd das Bild ja auch in einen Stream und hängt diesen bei FFiledStream ein.

Danke schonmal
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Bitmap an Formular senden mit Indy

  Alt 11. Feb 2013, 18:52
speichert denn die Picture.Bitmap.SaveToStream Methode im richtigen Format?
Als Test einfach in einen FileStream schreiben, und die Datei dann öffnen.
Michael Justin
  Mit Zitat antworten Zitat
schwarzerlotus

Registriert seit: 25. Jul 2011
22 Beiträge
 
#3

AW: Bitmap an Formular senden mit Indy

  Alt 12. Feb 2013, 13:51
das war schonmal ein guter Tipp.

Zum einen habe ich nun ein bmp file anstelle eines jpg in das Image geladen und ich hab in einem anderen Beitrag gefunden, dass man wohl die Position im Stream verändern muss ehe man diesen nutzten kann

  bildstream.seek(0,sofromBeginning);

Danach klappt das hier zumindest mal

Delphi-Quellcode:
  Image1.Picture.Bitmap.SaveToStream(bildstream);
  bildstream.seek(0,sofromBeginning);
  Image2.Picture.Bitmap.LoadFromStream(bildstream);
Wenn ich die Position mittels seek aber auch bei dem TIdMultipartFormDataStream mache so erhalte ich weiterhin die selbe Fehlermeldung - allerdings sehe ich nun mit Wireshark, dass die Nachricht deutlich größer ist und es wird auch in dem Feld name="file" ein Part mit Media Type: image/bmp (9437238) gelistet.

Scheint also schon in die Richtung zu gehen. Hat jemand eine Idee was AddFile anders macht im Vergleich mit AddFormField + Stream?
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Bitmap an Formular senden mit Indy

  Alt 14. Feb 2013, 20:37
Hey schwarzerlotus,

wenn du keinen vollständigen Dateinamen angibst (AFileName), zu einer Datei die real existiert, solltest du immer den passenden ContentType (AContentType) übergeben.

Die beiden Stellen kannst du dir im Indy-Quellcode auch einfach ansehen, ist sehr übersichtlich. Ich sehe da keine problematischen Unterschiede. Ich weiß aber nicht, welche Indy Version du benutzt, frühere könnten sich da durchaus anders verhalten.

Grüße
Sebastian
  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 00:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz