164 votes

Quelle est la meilleure pratique pour stocker les images téléchargées?

Je suis en train d'écrire une application qui permet aux utilisateurs de télécharger des images sur le serveur. Je m'attends à environ 20 images par jour tous les jpeg et probablement pas modifié le fichier/redimensionné. (C'est une autre question, comment faire pour redimensionner les images sur le serveur avant de le ranger. Peut-être que quelqu'un peut s'il vous plaît envoyez un .NET de ressources pour que, dans le commentaire). Je me demande maintenant quelle est la meilleure pratique pour stocker les images téléchargées.

Est-il a) je stocke les images dans un fichier du système de fichiers et de créer un enregistrement dans une table avec le chemin exact de l'image.

ou b) je stocker l'image elle-même dans une table en utilisant une "image" ou "données binaires" type de données du serveur de base de données.

Je vois des avantages et des inconvénients dans les deux. J'aime pas) parce que je peux les déplacer facilement les fichiers et juste à changer l'entrée de la table. D'autre part, je n'aime pas le stockage de données d'entreprise sur le serveur web et je n'ai pas vraiment envie de se connecter au serveur web de toute autre source de données qui contient les données d'entreprises (pour des raisons de sécurité) J'aime b) parce que toutes les informations en un seul endroit et est facilement accessible par une requête. D'autre part, la base de données permettra d'obtenir de très grandes très bientôt. L'externalisation des données peut être plus difficile.

Cheers, Tobias

107voto

Eran Galperin Points 49594

- Je stocker des fichiers sur le système de fichiers, car c'est ce son là, bien qu'il y a des exceptions. Pour les fichiers, le système de fichier est le plus flexible et performant solution (en général).

Il y a quelques problèmes avec le stockage des fichiers dans une base de données - les fichiers sont généralement beaucoup plus grande que la moyenne de la ligne d'en - suite-ensembles contenant de nombreux fichiers volumineux permettra de consommer beaucoup de mémoire. Aussi, si vous utilisez un moteur de stockage qui utilise la table des verrous pour les écritures (ISAM par exemple), votre table de fichiers peuvent être verrouillés en fonction de la taille / taux des fichiers que vous stockez.

En matière de sécurité - j'ai l'habitude de stocker les fichiers dans un répertoire qui est en dehors de la racine du document n'est pas accessible par le biais d'une requête http) et de les servir par un script qui vérifie pour l'autorisation appropriée en premier.

22voto

Martin Beckett Points 60406

Flickr utilise le système de fichiers - ils discutent des raisons ici

15voto

Brian MacKay Points 10483

Nous avons eu des clients insistent sur l'option B à quelques reprises sur différents backends, et nous avons toujours fini par revenir à l'option A finalement.

De grosses Gouttes comme ça juste n'ont pas été manipulés assez bien, même par SQL Server 2005, qui est la dernière, nous avons essayé.

Plus précisément, nous avons vu graves de ballonnements et je pense que peut-être les problèmes de verrouillage.

Une autre remarque: si vous utilisez NTFS de stockage en fonction de (windows server, etc), vous pourriez envisager de trouver un moyen de mettre des milliers et des milliers de fichiers dans un même répertoire. Je ne suis pas sûr pourquoi, mais parfois le système de fichiers ne permet pas de faire face à cette situation. Si quelqu'un en sait plus sur ce que j'aimerais entendre.

Mais j'essaie toujours d'utiliser des sous-répertoires pour casser un peu les choses. Date de création est souvent très efficace pour cela:

Images/2008/12/17/.jpg

...Cela fournit un niveau décent de séparation, et aide aussi un peu pendant le débogage. Explorer et FTP clients peuvent étouffer un peu quand il y a vraiment énorme répertoires.

12voto

too much php Points 27983

J'ai récemment créé un PHP/MySQL application qui stocke les fichiers Pdf/les fichiers Word dans une table MySQL (aussi grand que 40 mo par fichier).

Pour:

  • Les fichiers téléchargés sont répliquées sur le serveur de sauvegarde avec tout le reste, pas de stratégie de sauvegarde est nécessaire (que la paix de l'esprit).
  • Configurer le serveur web est un peu plus simple parce que je n'ai pas besoin d'avoir un uploads/ dossier et de dire toutes mes applications où il est.
  • J'arrive à utiliser les transactions pour les modifications pour améliorer l'intégrité des données - je n'ai pas à vous soucier des orphelins et des fichiers manquants

Inconvénients:

  • mysqldump prend maintenant un looooong moment parce qu'il y est de 500 mo de données du fichier dans l'un des tableaux.
  • Dans l'ensemble pas très mémoire/cpu efficace lorsque par rapport au système de fichier

J'appelle mon de la mise en œuvre d'un succès, il prend soin des besoins de sauvegarde et simplifie la mise en page du projet. Le rendement est très bien pour les 20-30 personnes qui utilisent l'application.

7voto

barfoon Points 6999

J'utilise des images téléchargées sur mon site Web et je dirais certainement l'option a).

Une autre chose que je recommande fortement est de changer immédiatement le nom de fichier de ce que l’utilisateur a nommé la photo, en quelque chose de plus facile à gérer. Par exemple, quelque chose avec la date et l'heure identifie de manière unique chaque image.

Il est également utile d'effacer le nom de fichier de l'utilisateur de tout caractère étrange pour éviter des complications futures.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X