2009-06-26 64 views
2

我正在使用asp.net 2.0在win2003上構建一個小型web應用程序。 我需要創建一些小文件,我認爲這些文件可以通過網絡訪問,並且文件假設有10分鐘的到期時間。 我沒有在框架中找到任何支持,我想到的另一個解決方案是有一個計劃任務,可以在X分鐘內清理文件。但不知何故,我認爲我不是第一個遇到這個問題,並想知道是否還有其他智能解決方案。使用過期時間創建公共臨時文件

在此先感謝。

+0

控制文件訪問遠程用戶的目的是什麼? – 2009-06-26 14:32:51

回答

2

做了什麼不知道更多關於你爲什麼這樣做,我覺得你的外部程序來清理文件出的解決方案是最佳的解決方案。另一種方法可能是將「文件」存儲在數據庫中,並創建一個處理程序來從數據庫中檢索數據,但前提是「文件」未過期。然後,您可以更頻繁地安排數據庫上的清理任務,並且仍然只提供未過期的「文件」。在磁盤上創建它們會強制您定期執行清理操作,以確保過期的項目不再可用。

我想你也可以在磁盤文件上執行處理程序,並在提供文件之前檢查創建日期。在這種情況下,包含實際文件的文件夾將需要在網站之外或禁止直接訪問正常用戶的禁區內。

0

由於它很小,並且如果你想保持簡單,只需檢查每N個請求到網站。如果您認爲要清理的文件數量可能會變大,請在找到幾個要清理的文件後停止清理,並讓下一個請求清理更多。好處是您不必管理外部工作(並安裝並保持運行等)。

可能不是一個大網站的好主意。

0

控制文件訪問遠程用戶的目的是什麼?

您可以創建Windows服務或計劃的控制檯應用程序來定期移除過期的目錄/文件。或者,您可以讓您的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(); 
      } 
     }