2009-06-26 8 views
2

私はasp.net 2.0でwin2003に小さなwebappを構築しています。 ウェブ用にアクセス可能な小さなファイルを作成する必要があります。ファイルには有効期限が10分あるとします。 私はフレームワークでこれをサポートしていませんでした。他の解決策は、X分前にファイルを消去するスケジュールジョブを用意することでした。しかし、どういうわけか、私はこの問題を経験し、他のスマートなソリューションがあるのだろうかと疑問に思います。有効期限のある公開テンポラリファイルを作成する

ありがとうございます。

+0

リモートユーザーへのファイルアクセスを制御する目的はありますか? –

答えて

2

で行われているものと同様のものですが、私はファイルを一掃するために外部プログラムのソリューションが最善の解決策だと思います。代わりに、 "ファイル"をデータベースに格納し、データベースからデータを取得するハンドラを作成することもできますが、 "ファイル"が期限切れになっていない場合に限ります。その後、データベース上のクリーンアップタスクのスケジュールをずっと少なくすることができ、有効期限が切れていない「ファイル」だけを処理することができます。ディスク上に作成すると、期限切れのアイテムが使用できなくなるように、定期的なスケジュールでクリーンアップを実行する必要があります。

ファイルを処理する前に、ディスク上のファイルでハンドラを実行し、作成日を確認することもできます。この場合、実際のファイルを含むフォルダはWebサイトの外にあるか、通常のユーザーからの直接アクセスを禁止する制限された領域にある必要があります。

0

小さいので、単純なままにしたい場合は、ウェブサイトへのNリクエストごとにチェックしてください。クリーンアップするファイルの数が多くなる可能性があると思う場合は、クリーンアップするために少数のファイルを見つけてから次の要求をクリーンアップするようにしてからクリーンアップを停止します。利点は、外部ジョブを管理する必要がなく(インストールして実行するなど)必要がないことです。

おそらく大きなサイトには適していません。

0

リモートユーザーへのファイルアクセスを制御する目的はありますか?

期限切れのディレクトリやファイルを定期的に削除するために、Windowsサービスまたはスケジュールされたコンソールアプリケーションを作成することができます。また、Webページのファイルに直接リンクするのではなく、Webアプリケーションでファイルの応答を管理させることもできます。ファイルが特定の年齢を過ぎると、単にファイルを返さないようにアプリケーションをコーディングします。ここで

は、私はあなたがこれをやっている理由についての詳細を知らなくても、過去

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(); 
      } 
     } 
関連する問題