2010-03-17 1 views
1

J'ai besoin d'un endroit pour stocker des images. Ma première pensée était d'utiliser la base de données, mais many seems to recommend using the filesystem. Cela semble correspondre à mon cas, mais comment puis-je l'implémenter?Stocker et récupérer des images à partir du système de fichiers au lieu de la base de données

Les noms de fichiers doivent être uniques, comment faire cela. Dois-je utiliser un guid? Comment récupérer les fichiers, dois-je aller directement à la base de données en utilisant le nom de fichier, faire une page aspx et en passant le nom de fichier ou la clé primaire comme une chaîne de requête, puis lire le fichier.

Qu'en est-il de la mise en cache côté client, est-ce activé lors de l'utilisation d'une page comme image.aspx? Id = 123? Comment puis-je supprimer les fichiers lorsque l'enregistrement associé est supprimé?

Je suppose qu'il y a beaucoup d'autres choses auxquelles je n'ai toujours pas pensé.

Les liens, les échantillons et les directives sont les bienvenus!

Répondre

1

Uploading Files in ASP.NET 2.0

Vous semblez en l'air sur la façon de le faire, donc je vais vous donner quelques idées pour vous aider à aller. Si vous souhaitez utiliser un système de fichiers, assurez-vous de connaître la limite du nombre de fichiers autorisés par répertoire. Vous pouvez donc configurer un système qui crée des sous-répertoires. http://ask-leo.com/is_there_a_limit_to_what_a_single_folder_or_directory_can_hold.html

Je voudrais faire une table quelque chose comme ceci:

FileUpload 
UploadID   int identity/auto generate PK, used as FK in other tables 
InternalFileName string 
DisplayFileName string 
Comment   string 
MimeType   string 
FileSizeBytes  int 
FileHash   string MD5 Hash of a File 
UploadUserID  int FK to UserID 
UploadDate  date 

Vous inclure le UploadID dans la table qui « possède » ce téléchargement, comme l'Ordre associé, etc. Vous pouvez ajouter le InternalDirectory colonne, mais je préfère calculer cela en fonction d'une valeur Root constante + une valeur spécifique de la clé. Par exemple, le nom complet du fichier et le répertoire seraient:

Constant_Root + « \ » + OrderID + « \ » + InternalFileName

Vous pouvez faire le InternalFileName être le UploadID et l'extension de fichier à partir du fichier d'origine. De cette façon, il sera unique, mais vous devrez insérer la ligne comme première partie du processus, et la mettre à jour après que vous ayez connu le nom du fichier et l'identité/auto génèrent la valeur de ligne. Vous pouvez créer le fichier InternalFileName comme YYYMMDDhhmissmmm et l'extension de fichier du fichier d'origine, ce qui peut être assez unique en fonction de la façon dont vous utilisez les sous-répertoires.

J'aime stocker un MD5 Hash of a File qui facilite la détection des doublons. MimeType et FileSizeBytes peuvent être trouvés à partir du système de fichiers, mais si vous les stockez dans la base de données, cela facilite la maintenance puisque vous pouvez interroger des fichiers volumineux ou des fichiers de certains types.