2012-08-15 100 views
1

在我的應用程序中,我根據用戶選擇的選項修改圖像。每次修改默認圖像時,我都會保存並將其命名爲用戶ID & date.now.tostring("yyyyMMddHHmmssf"),以解決瀏覽器緩存問題。這工作正常,但現在我可能會結束很多舊圖像。在會話結束時從服務器刪除臨時文件

現在我該如何刪除服務器上我的~/Images/Temp/userID文件夾中的所有圖像?我正在考慮在Global.asax中使用Session_EndApplication_end,但我不認爲我可以訪問任何變量來獲取臨時圖像的路徑。

如何在會話結束後刪除這些臨時文件或類似的東西?

回答

0

會話結束僅針對進程內會話觸發,並不能保證(例如,服務器可能會失去電源並且不會觸發)。應用程序結束不應該經常觸發,並且(正如您所指出的那樣),您可能沒有執行清理所需的數據。

這不是不好在會話結束時執行清理工作,但對於這個特定的問題,可能會有更好的,更確定的解決方案。

如果唯一的命名是問題的根源,有幾個選項浮現在腦海:

  • 使用的命名慣例,它允許您定期運行Windows任務,以確定舊圖像,並清除它們。 Powershell對於這樣的任務非常靈活。

  • 在名稱末尾提供具有不同查詢字符串參數的圖像,以避免緩存(但保持文件名一致)。

    實施例:<img src="images/tim-medora.jpg?v=123" alt="picture" />

  • 通過處理程序動態提供圖像。這使您可以控制緩存設置,更改查詢字符串等。

  • 爲圖像指定自定義擴展名併爲該擴展名在IIS中設置不同的緩存設置。只要有效的圖像,Web瀏覽器就不會遇到指向自定義擴展名的圖像標記的問題。

+0

查詢字符串參數是最簡單的...基本上,只需要爲文件命名一次,並在更新時覆蓋它。然後當你設置你的圖像的源代碼(在你的代碼後面,如果你想),追加一個查詢字符串的圖像名稱。它可以是任何隨機值......其目的是欺騙網絡瀏覽器再次下載圖像,從而確保您永遠不會看到舊的緩存版本的圖像。 – 2012-08-15 14:47:39

+0

這就像4答案在一... 1)我試圖避免有另一個程序或任務清理舊文件。 2,3,4)由於我仍然不熟悉web開發,因此我必須閱讀如何使用這些建議。如果這樣做有所不同,我正在做的事情都是通過VS2010中的代碼完成的。這可能不是正確的做事方式,但我更像是一個Windows .NET程序員,而不是ASP/Web開發人員。 – daNinja 2012-08-15 14:50:56

+0

查詢字符串做了訣竅。現在,每個用戶(<200)只會創建一個臨時圖像。我在http://forums.asp.net/t/1561843.aspx/1找到了一個完美的問題,其中OP幾乎完成了我正在做的事情,除了他將修改後的圖像保存到處理程序的響應輸出流中。如果我能做到這一點,那麼我就不需要首先保存這些愚蠢的圖像。現在我只需要弄清楚如何使用處理程序.... – daNinja 2012-08-15 16:51:38