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

Problem: IE, Internet Explorer zeigt keine Bilder an

Beitragvon pythonulli » Montag 25. August 2008, 10:39

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

Beitragvon BlackJack » Montag 25. August 2008, 11:05

``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

Beitragvon pythonulli » Dienstag 26. August 2008, 06:58

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

Beitragvon BlackJack » Dienstag 26. August 2008, 07:23

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

Beitragvon pythonulli » Dienstag 26. August 2008, 14:25

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

Beitragvon pythonulli » Dienstag 26. August 2008, 14:29

Nee, nur "inhalt" klappt gar nicht.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 26. August 2008, 14:34

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 Modvoice
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Dienstag 26. August 2008, 14:54

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 26. August 2008, 15:16

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 Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Dienstag 26. August 2008, 15:29

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

Beitragvon pythonulli » Dienstag 26. August 2008, 19:52

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

Beitragvon sma » Mittwoch 27. August 2008, 07:41

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

Beitragvon Y0Gi » Mittwoch 27. August 2008, 13:12

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

Beitragvon pythonulli » Mittwoch 27. August 2008, 14:48

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

Beitragvon Y0Gi » Mittwoch 27. August 2008, 15:05

Hast du mal den Cache-Control-Header weggelassen?

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]