Bilder-Upload und Cache

lisali

Erfahrenes Mitglied
Hi,

wie kann ich auf optimalste Weise verhindern, dass bei einem Bild-Upload das Bild vom Cache des Clients genommen wird?

Ich hab gegoogelt und gelesen, dass man einen Timestamp verwenden soll... verstehe das allerdings nicht genau. Und das mit dem <meta> im Header funktioniert nicht.

Ich hoffe mir kann jemand helfen. :)
 
Also wenn dein Browser http://www.example.com/bild.jpg aufruft, cached er es und benutzt als Schlüssel die URL. Um den Browser zu zwingen das Bild neu zu laden, hängst du einfach etwas an die URL an.
http://www.example.com/bild.jpg?123
Wenn du den Timestamp nimmst, an dem das Bild hochgeladen wurde, kann der Browser es immernoch cachen, aber wenn es ersetzt wird, entsteht eine andere URL und dadurch ein neuer Schlüssel, welcher im Cache noch nicht vorhanden ist.
 
Ich verstehe. Kann ich auch was anderes benutzen als Alternative zu einem Timestamp, was gut wäre?
 
Der Timestamp ist am einfachstes, weil er auch im Dateisystem zu finden ist.
Wenn du für jeden Upload einen neuen Datensatz mit eindeutigem Schlüssel anlegst, tut es auch der.
Oder du zählst jedes mal einen Zähler hoch und hängst dann ?0, ?1, ?2 usw. an.
Auch die größe in Byte der Datei würde vermutlich funktionieren, aber da kann es ja theoretisch zu doppelten kommen.
Oder der Hashcode der Datei (z.B. md5)
 
Wie würde da eine if Abfrage aussehen können, um zu überprüfen, ob das jetzt das richtige neue Bild ist?
 
Du brauchst nichts zu überprüfen. Wenn du zum Beispiel in einem img-tag das Bild zum Client sendest, hängst du den Timestamp(oder was auch immer) dran. Natürlich nicht den aktuellen Timestamp, sondern dann, wann das Bild erzeugt/hochgeladen wurde.
<img src="http://www.example.com/bild.jpg?1275337763" />
Du musst dich sonst um nichts kümmern.
Wenn dann irgendwann das Bild ersetzt wird, ändert sich die URL und der Browser fordert die Datei vom Server an, anstatt aus dem Cache.
 
Dann muss ich ja diesen Timestamp in der Datenbank speichern?

Also, zum Beispiel heißt bei mir das Profilbild eines Benutzers immer "user.jpg".

Wenn da jetzt der Timestamp dran ist, wird das Bild doch gar nicht mehr gefunden?
 
Hi

du kannst noch soviele Parameter an das Bild anhängen und es wird immer geladen ;) Das heißt den Timestamp aus der DB auslesen und anhängen. So wird das Bild dann doch gecached und ändert sich erst, wenn ein neues hochgeladen wird ;)
 
Achso. Ich habe nämlich noch gar keine Spalte, die dafür vorgesehen ist den Timestamp eines hochgeladenen Bildes zu speichern.

Heißt das, ich sollte diese Spalte erstellen und wenn jemand ein Bild hochlädt, wird der aktuelle Timestamp per insert in die DB Spalte als Datensatz gespeichert und dann wird bei der Profilseite selbst, wo das Bild geladen wird, immer dieser Timestamp per Select ausgewählt und so wird dann das Bild geladen?
 
Heißt das, ich sollte diese Spalte erstellen und wenn jemand ein Bild hochlädt, wird der aktuelle Timestamp per insert in die DB Spalte als Datensatz gespeichert und dann wird bei der Profilseite selbst, wo das Bild geladen wird, immer dieser Timestamp per Select ausgewählt und so wird dann das Bild geladen?

Genau so siehts aus. Aber anstatt eines "insert" wird wohl ein "update" ausreichen
 
Zurück