2008-09-17 4 views
0

Je vais héberger des fichiers soumis par l'utilisateur. J'ai besoin de récupérer des données du fichier, puis de le déplacer dans un répertoire.Stratégies de stockage de fichiers pour un site Web d'hébergement Web

Il existe deux points d'intérêt pour la durée de vie de ce fichier. La première est lorsque les données sont extraites et la seconde est lorsque le fichier est archivé afin qu'il puisse être partagé.

Lorsque des données sont en cours d'abstraction, j'ai pensé que renommer le fichier à quelque chose d'unique ou ajouter une chaîne unique au nom de fichier pour l'empêcher d'écraser d'autres fichiers existants. Quand le fichier va être archivé, j'ai pensé à trois stratégies. L'un consiste à conserver tous les fichiers téléchargés à partir d'une certaine données dans un dossier. (2006/sept/04, 2008/jan/05) L'autre est de garder un dossier et de le remplir jusqu'à un nombre maximum de fichiers que je veux conserver dans le dossier et en créer un autre (/ folder001 /,/folder002 /,/folder003 /, etc ..). Une autre consiste à créer des sous-dossiers une fois qu'ils atteignent un certain seuil. Donc, comme (/ j/jd/jde/jdelator) j'ai vu cela dans unix pas sûr de savoir comment expliquer cela.

Les questions que j'ai est de savoir quel genre de stratégies vous avez trouvé utile ou utilisé?

Répondre

3

Lorsque les données sont en cours d'abstraction, je choisirais quelque chose comme: filename + millisec(); Il est peu probable que deux appel à millisec sera le même, et le nom de fichier est plus convivial lors de l'accès. La stratégie de date peut être pratique si vous décidez de supprimer les fichiers anciens et inutilisés: il vous suffit de récupérer le dossier 2006 et de supprimer tout ce qui n'a pas été consulté l'année dernière, selon votre journal. Cela peut également être une bonne indication pour vos utilisateurs, car ils sauront s'il s'agit d'un nouveau fichier ou non. Le dossier XYZ est seulement une variante de celui-ci, en remplaçant la date par un tag chaque N fichiers.

Les sous-dossiers de seuil vous aident à réduire le nombre d'entrées de vos répertoires, de sorte que l'accès est plus rapide. Notez que cette solution nécessite parfois de déplacer des fichiers (et ensuite de casser une URL si elle n'est pas mappée) quand un répertoire particulier se développe.

Une autre possibilité consiste à utiliser une base de données avec UID correspondant à l'emplacement du nom de fichier et l'accès au fichier via http://server.com/UID/filename.txt. De cette façon, l'utilisateur enregistre le fichier sous "nom de fichier".txt "ce qui est pratique pour lui, et vous savez avec l'URL où trouver le fichier (en utilisant le DB pour transformer UID à l'emplacement) Notez que l'UID peut être une somme de contrôle (MD5, SHA-1) pour gérer les doublons de le même fichier.

1

J'ai utilisé une base de données relationnelle qui étiquette les ID (int) aux uuids qui sont le nom des fichiers. De cette façon, peu importe comment ils sont sur le disque. Cela m'aide à masquer les fichiers. En outre, je peux alors utiliser JOINs pour "renommer" le fichier arbitrairement. En outre, je peux utiliser différents "noms" de fichiers. Tout dépend de votre application et de l'endroit où elle est en cours d'exécution.

1

Bien que cela dépende de votre application et etc., je suggère de garder le système de dépôt de fichiers très simple pour le moment, et de décider d'une stratégie plus élaborée plus tard. En d'autres termes, vous faites un genre de "chaos géré" pendant un certain temps; La structure et la stratégie apparaîtront plus tard, lorsque vous découvrirez toutes les exigences et les spécificités du domaine. En restant simple, vous pouvez tout changer facilement.

De toute façon, le changement est inévitable, la meilleure chose que vous pouvez faire maintenant est de choisir une certaine stratégie et de tout documenter.

2

Je voterais avec guid dans une base de données, puis j'utiliserais l'en-tête Content-Disposition pour le renommer si nécessaire. Une chose que je préconiserais est que les dossiers que vous utilisez sont stockés en dehors de la racine Web; vous ne voulez pas que les utilisateurs téléchargent des fichiers dans vos dossiers d'applications.

Questions connexes