Problem: IE, Internet Explorer zeigt keine Bilder an

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
pythonulli
User
Beiträge: 13
Registriert: Donnerstag 21. August 2008, 16:09

Hallo zusammen,

ich habe einige html-seiten geschrieben, die per cgi generiert werden. In einem Frame links erscheinen die thumbs von Fotos. Bei Mausklick auf dem thumb öffnet sich im Frame rechts das Bild. Das funktioniert aber nicht im IE. Es kommt nur ein "Plop-Geräusch", das wars. Habe im IE alle Sicherheitseinstellungen runtergefahren. Nützt nichts.
Mit Firefox oder Opera habe ich keine Probleme bei der Seitenanzeige.
Weiß jemand Rat?

Code: Alles auswählen

    print 'Content-Type: image/jpg'## irre, aber: print 'Content-Type: image/jpg\n\n' funktionierte nicht
    print 'Cache-Control: max-age=0'
    print
    
    picture = file('foto', 'rb')
    inhalt = picture.read()
    picture.close()
    print inhalt
Gruß
Ulli
BlackJack

``print`` setzt ein '\n' hinter die Ausgabe, dass heisst da ist mindestens ein zusätzliches Byte am Ende der Bilddaten, was nicht zum Bild gehört. Vielleicht ist dass das Problem?
pythonulli
User
Beiträge: 13
Registriert: Donnerstag 21. August 2008, 16:09

Du meinst das "print" in Zeile 4?
Das wird mE gebraucht, um zu zeigen, dass der header endet.
Und wie gesagt, in Opera und Firefox läuft alles wie geschmiert.

Gruß
Ulli
BlackJack

Nein ich meine das ``print`` in Zeile 9.
pythonulli
User
Beiträge: 13
Registriert: Donnerstag 21. August 2008, 16:09

Ja, okay,
aber wie teile ich dem Programm dann mit, dass es "inhalt" ausgeben soll?
Einfach nur "inhalt" setzen? Komisch :) Ich versuchs mal. Danke
pythonulli
User
Beiträge: 13
Registriert: Donnerstag 21. August 2008, 16:09

Nee, nur "inhalt" klappt gar nicht.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

pythonulli hat geschrieben:Nee, nur "inhalt" klappt gar nicht.
Dann wird es ja auch gar nicht ausgegeben.

Code: Alles auswählen

print inhalt,
(also mit Komma)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Macht das nicht noch ein zusaetliches Leerzeichen? Oder kommt das Leerzeichen erst, wenn man hinter dem Komma noch weitere Dinge angibt?

Code: Alles auswählen

>>> print "sdf", "sdf"
sdf sdf
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Rebecca hat geschrieben:Macht das nicht noch ein zusaetliches Leerzeichen? Oder kommt das Leerzeichen erst, wenn man hinter dem Komma noch weitere Dinge angibt?
Nein, das kommt erst beim Anhängen von weiteren Sachen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Sagt's ihm doch einfach gleich richtig :)

Code: Alles auswählen

import sys
sys.stdout.write(image_data)
pythonulli
User
Beiträge: 13
Registriert: Donnerstag 21. August 2008, 16:09

Hallo zusammen,
leider klappt keine der vorgeschlagenen Alternativen. Firefox schluckt alles, IE versagt auf ganzer Linie und macht nur dieses ominöse "plop".

Unten links ist ein gelbes icon mit schwarzem Ausrufezeichen. Läßt sich nicht klicken. Keine Ahnung, was das soll. Vielleicht irgendein (Un)sicherheitszeichen. Die spinnen, die Redmonder.
Danke an alle.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Der HTTP-Standard erfordert, dass alle Zeilen mit \r\n beendet werden. Abhängig vom Betriebssystem schreibt Python aber nur \n, was zu einem Problem führen könnte. Vielleicht ist der IE hier weniger verzeihend als andere Browser?

In dem Kommentar in Zeile 2 steht etwas von "irre", aber daran ist nichts irre: Ein print, welches 2x \n schreibt, erzeugt insgesamt drei Zeilenumbrüche, das ist aber einer zu viel, um den Header zu beenden. Der letzte \n ist damit das erste Zeichen im Bild und damit sind die Bilddaten korrupt. Ich gehe davon aus, dass sich der Kommentar auf einen Fall bezieht, wo es Zeile 3-4 nicht gab.

Stefan
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

sma hat geschrieben:Der HTTP-Standard erfordert, dass alle Zeilen mit \r\n beendet werden. Abhängig vom Betriebssystem schreibt Python aber nur \n, was zu einem Problem führen könnte. Vielleicht ist der IE hier weniger verzeihend als andere Browser?
Das würde mich auch interessieren. Bisher habe ich offenbar nur `\n` verwendet und es nicht mit dem IE getestet (allerdings auch noch keine Klagen gehört).

Für CGI empfehle ich immer `sys.stdout.write()` mit expliziten Zeilenumbrüchen im Argumentstring zu verwenden, da `print` hier sehr viel Verwirrung stiften kann. "Sag' nein zu Magic!" ;)
pythonulli
User
Beiträge: 13
Registriert: Donnerstag 21. August 2008, 16:09

Ich habe jetzt alle "print"-Zeilen mit "sys.stdout.write()" ersetzt und auch \r\n nicht vergessen.
Z.B. sys.stdout.write(image + '\r\n')

Firefox hui, IE pfui :cry:

Danke für die Anregungen.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Hast du mal den Cache-Control-Header weggelassen?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ist vielleicht das JPEG-Bild kaputt? Wird es vom IE angezeigt, wenn man direkt als Datei lädt?

Stefan
pythonulli
User
Beiträge: 13
Registriert: Donnerstag 21. August 2008, 16:09

Cache-Header weggelassen. Keine Besserung. IE liegt immer noch auf der Intensivstation.
Trotzdem Danke.
pythonulli
User
Beiträge: 13
Registriert: Donnerstag 21. August 2008, 16:09

Nee, das Bild ist in Ordnung. FF und Opera zeigen es doch auch an. Vielleicht glaubt IE es sei eine sounddatei und plöppt deswegen immer. :)
Gruß,
Ulli
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Eines der vielen Dinge, die mich das Pythonchallenge gelehrt hat: (Die meisten) Browser sind, im Gegensatz zu Grafik-Programmen, sehr grosszuegig damit, defekte Bilder anzuzeigen, auf deine Aussage wuerde ich also nichts geben.

Was ist mit Sicherheitseinstellungen, Popup-Blocker etc? Ausserdem muss ich gerade an diese Feature denken: [url=http://www.python-forum.de/topic-15784.html]. Wer weiss, was dir der IE sonst noch so verschweigt.

Vlt. solltest du einfach mal die IE-plöpp-Sprache lernen :wink:
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
pythonulli
User
Beiträge: 13
Registriert: Donnerstag 21. August 2008, 16:09

Habe die Bilder gecheckt, sie sind in Ordnung.
Habe in den Einstellungen noch einmal gewirkt und alles zugelassen bzw. popupblocker nicht zugelassen.
Mit einem Teilerfolg. Er plöppt jetzt nur beim ersten Mausklick auf das thumb, beim Zweiten schon nicht mehr. :)
Hier sind die Headerangaben, könnt ihr daraus einen Fehler lesen?

Code: Alles auswählen

http://www.xxxxx.de/cgi-bin/dolimagejpeg.cgi?bild=image_nr_2.jpg ## Dieser link soll im rechten Frame das Bild erscheinen lassen

GET /cgi-bin/dolimagejpeg.cgi?bild=image_nr_2.jpg HTTP/1.1
Host: www.xxxxx.de
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.xxxxx.de/cgi-bin/dolimage_frame1.cgi
Cookie: sesid=id5yt0MCs2A1mYv3WJBY; valid=1219857647.57; wert=777

HTTP/1.x 200 OK
Date: Wed, 27 Aug 2008 17:25:43 GMT
Server: Apache/2.0.48 (RedHat 9/Server4You)
Cache-Control: max-age=0
Connection: close
Transfer-Encoding: chunked
Content-Type: image/jpg
Den host habe ich gexxxxt.
Gruß
Ulli
Antworten