2010-12-05 5 views
2

Ich frage mich, was ist die beste Ordnerstruktur für eine Webanwendung, um Benutzer Bilder zu speichern, wenn sie unterschiedliche Benutzernamen und verschiedene Alben haben. Ich benutze Amazon S3, Ordner und EimerBilddateistruktur und Dateiname der Codierung. wie Facebook Bild URLs

ich nicht Leute wollen in der Lage sein, die URLs für Benutzer/Alben vorherzusagen wie FB

http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs1189.snc/154140_10150322456245277_731310276_15908482_4918209_n.jpg

Auch für den Dateinamen. Was ist die beste Art von Informationen zum Verschlüsseln des Dateinamens? (Benutzername, Datum/Uhrzeit, Benutzer-ID) z.

Original: apple.jpg

Codierte: 1263547483_56783929_3934736_943883.jpg

Was würden Sie diese URL sichere Dateinamen verwenden zu codieren? Base64, MessageDigest?

Antwort

1

Ich würde "zufällige" Dateinamen erstellen. Die Dateien können entweder in einem Verzeichnis oder in einer generierten Verzeichnisstruktur wie dir01, dir02, dir03 gespeichert werden. Separate Verzeichnisse sind besser für wirklich große Mengen von Dateien. Ich denke, dass Sie nicht mehr als 10K Dateien in einem Verzeichnis speichern sollten. Wenn Sie mehr Dateien haben, erstellen Sie jedes Mal ein neues Verzeichnis, wenn der Zähler 10K erreicht.

Alle Metadaten von Dateien einschließlich des physischen Pfads im Dateisystem sollten in der Datenbank gespeichert werden. Die Dateitabelle kann einen Fremdschlüssel für die Benutzertabelle enthalten, sodass Sie immer den Besitzer der Datei kennen können.

Dieses Design ist skalierbar: In Zukunft können Sie verschiedene Verzeichnisse auf separaten Datenträgern speichern oder sogar das CDN-System verwenden. Das ist sicher genug. Es ist unmöglich zu erraten, wie Sie die Datei-Metadaten in den Dateinamen kodieren, weil Sie nichts kodieren: Sie erstellen einfach einen zufälligen Namen. Es ist einfach & leistungsstark. Alle Daten befinden sich in der Datenbank, so dass Sie in Zukunft neue Funktionen hinzufügen und diese auf den alten Daten in der Datenbank ausführen können.

1

Encoding mit ex Base64 scheint eine schlechte Idee. Ich würde einfach den Dateinamen durch eine GUID ersetzen und eine Zuordnung in einer Datenbank haben, die die Datei und die GUID zusammen zuordnen.

Etwas wie:

http://photos.site.com/{account-id}/{gallery-id}/{image-guid}.jpg 

die in ergäbe:

http://photos.site.com/23323/323/F66A80B2_007F_11E0_86C8_322ADFD72085.jpg