2010-12-05 41 views
2

Je me demande quelle est la meilleure structure de dossier pour une application Web pour enregistrer les images des utilisateurs s'ils ont des noms d'utilisateur et des albums différents. J'utilise Amazon S3, dossiers et seauxStructure de fichier d'image et nom de fichier d'encodage. J'aime l'image Facebook Urls

Je ne veux pas que les gens soient en mesure de prédire les urls pour les utilisateurs/albums comme FB

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

également le nom du fichier. Quel est le meilleur type d'information à encoder pour changer le nom de fichier. (nom d'utilisateur, date/heure, ID utilisateur) E.g.

Original: apple.jpg

Codé: 1263547483_56783929_3934736_943883.jpg

Que voulez-vous utiliser pour encoder ces URL de noms de fichiers sûrs? Base64, MessageDigests?

Répondre

1

Je créerais un nom de fichier "aléatoire". Les fichiers peuvent être sauvegardés dans un répertoire ou dans des répertoires générés comme dir01, dir02, dir03. Les répertoires séparés sont meilleurs pour de très grandes quantités de fichiers. Je pense que vous ne devriez pas stocker plus de 10K fichiers dans un seul répertoire. Si vous avez plus de fichiers, créez un nouveau répertoire à chaque fois que le compteur arrive à 10K.

Toutes les métadonnées des fichiers, y compris le chemin physique dans le système de fichiers, doivent être stockées dans la base de données. La table des fichiers peut contenir une clé étrangère à la table des utilisateurs, vous pouvez donc toujours connaître le propriétaire du fichier.

Ce design est évolutif: à l'avenir, vous pouvez stocker différents répertoires sur des disques séparés ou même utiliser le système CDN. C'est assez sécurisé. Il est impossible de deviner comment encoder les métadonnées du fichier dans le nom de fichier parce que vous n'encodez rien: vous créez simplement un nom aléatoire. C'est simple & puissant. Toutes les données sont dans la base de données, vous pouvez donc ajouter de nouvelles fonctionnalités à l'avenir et les exécuter sur les anciennes données dans la base de données.

1

Encoder avec ex Base64 semble être une mauvaise idée. Je voudrais simplement remplacer le nom de fichier par un GUID et avoir une carte dans une base de données qui mappé le fichier et le GUID ensemble.

Quelque chose comme:

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

Ce qui donnera:

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