Question

Je construis une petite application Web sur Win2003 avec asp.net 2.0. J'ai besoin de créer de petits fichiers que je suppose accessibles par le Web et supposés avoir un délai d'expiration de 10 minutes. Je n'ai trouvé aucun support pour cela dans le framework et mon autre solution qui me venait à l'esprit était d'avoir un travail de planification qui nettoie le fichier toutes les X minutes. Cependant, je pense que je ne suis pas le premier à rencontrer ce problème et à me demander s’il existe d’autres solutions intelligentes.

Merci d'avance.

Était-ce utile?

La solution

Sans en savoir plus sur la raison pour laquelle vous faites cela, je pense que votre solution consistant à utiliser un programme externe pour nettoyer les fichiers est la meilleure solution. Une alternative pourrait consister à stocker les & Fichiers & Quot; dans une base de données et créer un gestionnaire qui récupère les données de la base de données, mais uniquement si le " fichier " n'est pas expiré. Vous pouvez alors planifier une tâche de nettoyage de la base de données beaucoup moins souvent et ne servir que les & Quot; fichiers & Quot; qui ne sont pas expirés. Leur création sur disque vous obligerait à effectuer le nettoyage régulièrement, afin de vous assurer que les éléments expirés ne sont plus disponibles.

Je suppose que vous pouvez également utiliser le gestionnaire avec des fichiers sur disque et vérifier la date de création avant de servir le fichier. Dans ce cas, le dossier contenant les fichiers réels devra se trouver en dehors du site Web ou dans une zone restreinte interdisant l’accès direct aux utilisateurs normaux.

Autres conseils

Comme il est petit et que vous voulez garder les choses simples, il vous suffit de vérifier chaque N requête sur le site Web. Si vous pensez que le nombre de fichiers à nettoyer peut devenir important, arrêtez de nettoyer après en avoir trouvé quelques-uns et laissez la demande suivante en nettoyer quelques-uns de plus. L’avantage est que vous n’avez pas besoin de gérer un travail externe (et de l’installer et de le laisser fonctionner, etc.).

Ce n'est probablement pas une bonne idée pour un grand site.

Le but est-il de contrôler l'accès aux fichiers pour les utilisateurs distants?

Vous pouvez créer un service Windows ou une application de console planifiée pour supprimer périodiquement les répertoires / fichiers arrivés à expiration. Vous pouvez également demander à votre application Web de gérer la réponse au fichier plutôt que de créer un lien direct vers les fichiers de votre page Web. Une fois que le fichier a dépassé un certain âge, il vous suffit de coder votre application pour ne pas le renvoyer.

Voici quelque chose de similaire à ce que j'ai fait dans le passé

protected void Button1_Click(object sender, EventArgs e)
        {
            string fileName = @"c:\SecureDirectory\DownloadableFile.txt";
            int exipireMinutes = -10;

            if (System.IO.File.Exists(fileName) && System.IO.File.GetCreationTime(fileName) >= DateTime.Now.AddMinutes(exipireMinutes))
            {
                byte[] fileBinary;
                using (System.IO.FileStream fs = System.IO.File.Open(Server.MapPath(fileName), System.IO.FileMode.Open))
                {
                    fileBinary = new byte[fs.Length];
                    fs.Read(fileBinary, 0, Convert.ToInt32(fs.Length));
                }
                Response.AddHeader("Content-disposition", "attachment; filename=" + fileName);
                Response.ContentType = "application/octet-stream";
                Response.BinaryWrite(fileBinary);
                Response.End();
            }
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top