MisterNick: Alternatives Bild anzeigen, falls orig. nicht existiert

Hallo,

ich habe eine Profilseite, auf der auch ein Profilbild angezeigt wird. Wenn ein Benutzer kein Profilbild hat, möchte ich ein default-Profilbild anzeigen.
Meine Frage ist jetzt, wie kann ich herausfinden, ob zu dem Benutzer ein Bild existiert?
Ich habe bereits Lösungen mit dem "onError" im img-Tag gesehen. Das Problem ist, das erst mal versucht wird, das Bild des Benuzters zu laden und wenn das nicht klappt dann wird das default Bild geladen. Im Firebug sehe ich dann einen "Network Error". Das möchte ich nicht.

Ich nutze JSP für meine Seite, auf dem Webserver wird daraus doch HTML gemacht. Dann muss ich doch zu der Zeit schon schauen können, ob das Bild existiert und wenn nicht, das dann das Default Bild ausgeliefert wird.

Kann mir hier einer weiterhelfen?

  1. Hi,

    ich habe eine Profilseite, auf der auch ein Profilbild angezeigt wird. Wenn ein Benutzer kein Profilbild hat, möchte ich ein default-Profilbild anzeigen.
    Meine Frage ist jetzt, wie kann ich herausfinden, ob zu dem Benutzer ein Bild existiert?

    Guck in die Profildaten. Du mußt doch wissen, wie für den Benutzer das Profilbild gespeichert wird.

    Ich habe bereits Lösungen mit dem "onError" im img-Tag gesehen. Das Problem ist, das erst mal versucht wird, das Bild des Benuzters zu laden und wenn das nicht klappt dann wird das default Bild geladen. Im Firebug sehe ich dann einen "Network Error". Das möchte ich nicht.

    Wenn der Nutzer ein Bild in seinem Profil hat, wird ja irgendwo dessen URL gespeichert.
    Was spricht dagegen, bei Nutzern ohne Bild genau dort die URL des Default-Bildes einzutragen?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  2. Hallo!

    ich habe eine Profilseite, auf der auch ein Profilbild angezeigt wird. Wenn ein Benutzer kein Profilbild hat, möchte ich ein default-Profilbild anzeigen.
    Meine Frage ist jetzt, wie kann ich herausfinden, ob zu dem Benutzer ein Bild existiert?

    Wie sollen wir das wissen!?
    Du hast uns ja nicht verraten, wie und wo "das Profilbild" ggf. gespeichert wird.

    Ich habe bereits Lösungen mit dem "onError" im img-Tag gesehen. Das Problem ist, das erst mal versucht wird, das Bild des Benuzters zu laden und wenn das nicht klappt dann wird das default Bild geladen.

    Ich würde es ja andersherum machen:
    Immer erst das Default Bild für jeden User laden,
    und dieses dann ggf. durch das jeweilige Profilbild des Users "ersetzen".

    Wenn es klappt - gut. Und wenn nicht ist das Default Bild da.
    Aber du musst dich nicht weiter darum "kümmern", ob das User Bild geladen wurde oder nicht (was gar nicht soo einfach ist, jenachdem aus welcher Quelle das jeweilige Bild kommt).

    Gruß Gunther

    1. @@Gunther:

      nuqneH

      Ich würde es ja andersherum machen:
      Immer erst das Default Bild für jeden User laden,
      und dieses dann ggf. durch das jeweilige Profilbild des Users "ersetzen".

      Dann wird aber immer das Default-Bild übertragen, auch wenn zu allen Nutzern ein richtiges Profilbild vorliegt.

      Wenn man das möchte (Möchte man?), ließe sich das rein in HTML umsetzen:

      <object data="johndoe.jpg">  
        <img src="default.jpg" alt="Profilbild"/>  
      </object>
      

      Möglich wäre object auch fürs Default-Bild. (Alternativtext dann als Elementinhalt.)

      Oder img fürs Profilbild und das Defaultbild als Hintergrundbild.

      Qapla'

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
      1. @@Gunnar Bittersmann:

        nuqneH

        Dann wird aber immer das Default-Bild übertragen, auch wenn zu allen Nutzern ein richtiges Profilbild vorliegt.

        Bei der Lösung mit Hintergrundbild wäre dies der Fall; bei der Lösung mit object nicht, die ist sauber.

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  3. Hello,

    Ich nutze JSP für meine Seite, auf dem Webserver wird daraus doch HTML gemacht. Dann muss ich doch zu der Zeit schon schauen können, ob das Bild existiert und wenn nicht, das dann das Default Bild ausgeliefert wird.

    Für das Bild musst Du ein eigenes Request-Objekt aufbauen.
    Du trägst in das Page-Objekt also keine statische URL für ein Bild ein, mit der man ja auch ohne jegliche Anmeldung an die Bilder kommen könnte, sondern die URL des Request-Objektes für das Bild

    Dieses entscheidet dann, welches Bild ausgeliefert werden darf.
    Zuerst wird die Authorisierung geprüft
    wenn die erfolgreich war, welches Userfoto gefordert wird,
    dann ob dieses lesbar ist -> ausliefern, Ende!
    oder ob ein Ersatzbild ausgeliefert werden muss.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bikers-lodge.com
  4. Hallo,

    ich habe eine Profilseite, auf der auch ein Profilbild angezeigt wird. Wenn ein Benutzer kein Profilbild hat, möchte ich ein default-Profilbild anzeigen.

    Idee: Platzhalter für das src-Attribut <src="%profile_avatar%" alt="Avatar">

    Meine Frage ist jetzt, wie kann ich herausfinden, ob zu dem Benutzer ein Bild existiert?

    Genau: Die Frage nach dem Palü für Vlatzhalter ;)

    Ich habe bereits Lösungen mit dem "onError" im img-Tag gesehen.

    Idee: Serverseitige Lösung

    Du bist im Model 'Profile', das Model sei an eine Klasse gebunden. Diese Klasse hat eine Methode src_for_profile_avatar(); die liefert entoderweder:

    "/profiles/$certain_username/images/avatar.png"
    "/profiles/defaults/avatar.png"

  5. Ich verstehe das so, dass das Profilbild einen, z.b. durch die User-ID bestimmten Name hat, z.B. 1234567890.pic. Im Folgenden nehmen wir an:

    1.) Die Bilddatei ist, so vorhanden, unter DOCUMENT_ROOT/userpics/1234567890.pic gespeichert und unter der URL http://example.com/userpics/1234567890.pic abrufbar.
    2.) Das Default-Bild liegt unter DOCUMENT_ROOT/userpics/1234567890.pic und ist unter der URL http://example.com/userpics/default.pic abrufbar.

    GANZ EINFACHE LÖSUNG:

    Wenn der Browser das Bild abfordert und es nicht existiert, dann käme zu einem 404er. Den kann man z.B. beim Apache abfangen.

    Dann stelle in
    DOCUMENT_ROOT/userpics/.htaccess folgendes ein:

    ErrorDocument 404 /userpics/default.pic

    Voraussetzung:

    AllowOverride ist passend gesetzt, enthält also mindestens FileInfo.

    VERBESSERTE LÖSUNG:

    Wenn Du vermeiden willst, dass jedes mal Logeinträge für den 404er geschrieben werden, dann mach das mit mod_rewrite, stelle in DOCUMENT_ROOT/userpics/.htaccess folgendes ein:

    RewriteCond %{DOCUMENT_ROOT}/userpics/$1 !-f
    RewriteRule (.*) /userpics?default.pic [L]

    (Dokumentation)

    ANDERE LÖSUNGEN:

    Freilich kannst Du auch beim Erzeugen der Seite mit JSP nachschauen, ob das PIC existiert (und der Zugriff erlaubt wäre) und wenn nicht das default.pic ausliefern. Das ist optimal, weil die Lösung des Problems dann im Programm bleibt und somit nicht noch zusätzlich die Serverkonfiguration (z.B. bei einem Umzug zu überprüfen ist.) Die Ideallösung hinsichtlich der Leistung wäre die "GANZ EINFACHE LÖSUNG" bei abgestelltem Loggen der 404er oder eben die "VERBESSERTE LÖSUNG" (Der Server schaut sowieso nach, ob es die Datei gibt, er muss ja - wenn nicht - den 404er (FILE NOT FOUND) senden.

    Jörg Reinholz

  6. Hallo,

    Danke für euren vielen Vorschlägen. Ich werde mir die noch mal genauer ansehen und mir dann davon etwas aussuchen :-)