2009-06-26 6 views
2

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 être accessibles par le web et les fichiers sont supposés avoir 10 minutes d'expiration. Je n'ai trouvé aucun support pour cela dans le framework et mon autre solution qui est venue à l'esprit était d'avoir un job de planning qui nettoie le fichier X minute. Mais d'une manière ou d'une autre, je pense que je ne suis pas le premier à éprouver ce problème et à me demander s'il existe d'autres solutions intelligentes.Création de fichiers temporaires publics avec un délai d'expiration

Merci d'avance.

+0

Est-ce que le but est de contrôler l'accès aux fichiers pour les utilisateurs distants? –

Répondre

2

Sans savoir plus sur pourquoi vous faites cela, je pense que votre solution d'un programme externe pour nettoyer les fichiers en est la meilleure solution . Une alternative pourrait être de stocker les "fichiers" dans une base de données et de créer un gestionnaire qui récupère les données de la base de données, mais seulement si le "fichier" n'a pas expiré. Vous pouvez alors planifier une tâche de nettoyage sur la base de données beaucoup moins fréquemment et ne servir que les "fichiers" qui n'ont pas expiré. Les créer sur le disque vous obligerait à faire le nettoyage sur un horaire régulier pour s'assurer que les éléments expirés ne sont plus disponibles.

Je suppose que vous pouvez également faire 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 doit être en dehors du site Web ou dans une zone restreinte qui interdit l'accès direct aux utilisateurs normaux.

0

Comme il est petit, et si vous voulez rester simple, il suffit de vérifier chaque N demandes au site Web. Si vous pensez que le nombre de fichiers à nettoyer peut devenir important, arrêtez le nettoyage après en avoir trouvé quelques-uns à nettoyer et laissez la prochaine requête en nettoyer un peu plus. L'avantage est que vous n'avez pas besoin de gérer un travail externe (et de l'installer et de le faire tourner, etc.).

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?

0

Vous pouvez créer un service Windows ou une application de console programmée pour supprimer périodiquement des répertoires/fichiers expirés. Vous pouvez également faire en sorte que votre application Web gère la réponse du fichier plutôt que de la lier directement aux fichiers de votre page Web. Une fois que le fichier a dépassé un certain âge, il suffit de coder votre application pour simplement ne pas renvoyer le fichier.

Voici quelque chose de semblable à ce que je l'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(); 
      } 
     } 
Questions connexes