Seite 1 von 2

Problem: IE, Internet Explorer zeigt keine Bilder an

Verfasst: Montag 25. August 2008, 10:39
von pythonulli
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

Verfasst: Montag 25. August 2008, 11:05
von 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?

Verfasst: Dienstag 26. August 2008, 06:58
von pythonulli
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

Verfasst: Dienstag 26. August 2008, 07:23
von BlackJack
Nein ich meine das ``print`` in Zeile 9.

Verfasst: Dienstag 26. August 2008, 14:25
von pythonulli
Ja, okay,
aber wie teile ich dem Programm dann mit, dass es "inhalt" ausgeben soll?
Einfach nur "inhalt" setzen? Komisch :) Ich versuchs mal. Danke

Verfasst: Dienstag 26. August 2008, 14:29
von pythonulli
Nee, nur "inhalt" klappt gar nicht.

Verfasst: Dienstag 26. August 2008, 14:34
von Leonidas
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)

Verfasst: Dienstag 26. August 2008, 14:54
von Rebecca
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

Verfasst: Dienstag 26. August 2008, 15:16
von Leonidas
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.

Verfasst: Dienstag 26. August 2008, 15:29
von Y0Gi
Sagt's ihm doch einfach gleich richtig :)

Code: Alles auswählen

import sys
sys.stdout.write(image_data)

Verfasst: Dienstag 26. August 2008, 19:52
von pythonulli
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.

Verfasst: Mittwoch 27. August 2008, 07:41
von sma
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

Verfasst: Mittwoch 27. August 2008, 13:12
von Y0Gi
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!" ;)

Verfasst: Mittwoch 27. August 2008, 14:48
von pythonulli
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.

Verfasst: Mittwoch 27. August 2008, 15:05
von Y0Gi
Hast du mal den Cache-Control-Header weggelassen?

Verfasst: Mittwoch 27. August 2008, 15:16
von sma
Ist vielleicht das JPEG-Bild kaputt? Wird es vom IE angezeigt, wenn man direkt als Datei lädt?

Stefan

Verfasst: Mittwoch 27. August 2008, 16:42
von pythonulli
Cache-Header weggelassen. Keine Besserung. IE liegt immer noch auf der Intensivstation.
Trotzdem Danke.

Verfasst: Mittwoch 27. August 2008, 16:44
von pythonulli
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

Verfasst: Mittwoch 27. August 2008, 16:56
von Rebecca
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:

Verfasst: Mittwoch 27. August 2008, 19:03
von pythonulli
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