2010-11-23 25 views
5

Ich möchte meinen Nutzern erlauben, einen Avatar auf ihr Profil hochzuladen. Meine erste Idee war, die Avatar-Datei so zu benennen: [user_id] .jpg. Selbst wenn ein Benutzer seinen Avatar aktualisiert, behält er den gleichen Namen.Der effizienteste Weg, um einen Benutzeravatar zu benennen?

Das Problem damit ist, dass wenn ich Caching auf dem Server verwenden (oder sogar wenn es auf dem Client verwendet wird) der neue Avatar nicht angezeigt wird.

Meine neue Lösung ist, die Datei wie folgt zu nennen:

[user_id] _ [random_number] .jpg

und speichern Sie die Zufallszahl in der Tabelle Benutzer. Wie würden Sie diese Nummer auf die effizienteste Weise generieren? Oder vielleicht gibt es eine bessere Lösung?

+0

Ich nehme an, 'user_id' ist eine Nummer? –

+0

@ Grzegorz: Ja, die tatsächliche ID der Tabelle Benutzer. Jetzt sehe ich, dass die Leute raten, den Ausweis nicht öffentlich zu zeigen. – Max

Antwort

5

ich tun würde, so etwas wie:

$avatarName = $userId . uniqid(); 
// add extension if needed, store it 

es schnell sein und das tun, was Sie wollen. uniqid()

EDIT

Wie von anderen Nutzern vorgeschlagen, sollten Sie die Benutzer-ID aus dem Bildnamen fallen. Eine öffentliche Benutzer-ID kann in Zukunft zu Problemen führen. Auch uniqid() sollte allein funktionieren.

$avatarName = uniqid(); 
// add extension if needed, store it 
+1

Upvoted, aber ich denke, $ userId sollte aus der Gleichung fallen gelassen werden ... –

+0

Ich stimme zu. Ich folgte nur OP-Idee. Entsprechend bearbeitet. – acm

+0

Ich verwende die $ userId öffentlich an verschiedenen Orten in meiner App. Gibt es einen Grund, warum es versteckt werden sollte? Wenn ich auf dein Profil klicke, bekomme ich eine ID in der URL: 333893. Ist es nicht Ihre Benutzerkennung? Oder ist es ein anderes Feld? – Max

7

Sie sollten den Cache ungültig machen können, wenn der Benutzer einen neuen Avatar hochlädt.

Wenn dies nicht möglich ist, können Sie es einfach als [uid] _ [YYYYMMDDhhmmss] .jpg oder so speichern. Keine Notwendigkeit, etwas zufälliges zu erzeugen ...

+1

Es sei denn, Sie möchten die "uid" vor anderen Benutzern verbergen, die möglicherweise die Vorteile einer anderen Benutzer-ID nutzen könnten. –

+3

Sicher .. OP sollte wahrscheinlich nur uniqid() verwenden. ".jpg"; und dann den aktuellen Avatar-Dateinamen im Benutzermodell speichern. –

+0

@Jorge: Ich verwende die $ userId öffentlich an verschiedenen Orten in meiner App. Gibt es einen Grund, warum es versteckt werden sollte? Auf SO wenn ich auf dein Profil klicke, bekomme ich eine ID in der URL: 313194. Ist es nicht Ihre Benutzerkennung? Oder ist es ein anderes Feld? – Max

1

Haben Sie darüber nachgedacht, ETags in Ihrem .htaccess zu konfigurieren?

See:

http://developer.yahoo.com/blogs/ydn/posts/2007/07/high_performanc_11/

Auch wenn Sie Dateinamen ändern können, müssen Sie die Bereinigung und Zeigeoperationen (entfernen/umbenennen die alte Datei, sagen Sie Ihre App die neue Datei) verwalten. Wenn Sie dies gerne tun, können Sie einfach die Benutzer-ID mit dem Unix-Zeitstempel zum Zeitpunkt des Uploads anhängen, es ist unwahrscheinlich, dass sie die gleiche Datei auf die gleiche Sekunde hochladen können. Wenn Sie es noch einzigartiger machen möchten, fügen Sie eine Zufallszahl/unify hinzu.

+0

Ich habe noch nie davon gehört, aber ich werde mich definitiv darum kümmern. – Max

0

Mit einer Zufallszahl gibt es eine winzige (vernachlässigbar) Chance einer Kollision, aber warum nicht starten bei 1 und erhöhen nur die Nummer jedes Mal, da Sie diese Nummer sind zu speichern.

+0

Das Problem ist, dass ich die Datenbank jedes Mal abfragen müsste, um zu wissen, welcher als nächstes kommt. Oder hatten Sie etwas anderes vor? – Max

+0

Sie könnten nur eine Master-Nummer für alle Benutzer behalten, Sie müssen sie jedoch jedes Mal wieder in der Datenbank speichern, wenn Sie sie verwenden. – aronp

Verwandte Themen