[英]How to deal with temporary files in ASP.NET?
請注意,我不是在談論編譯器生成的“臨時ASP.NET文件”。
我的Web應用程序(ASP.NET MVC)使用Graphviz生成圖像,然后將其提供給客戶端。 這需要創建臨時文件。
處理這些問題的最佳方法是什么? 有沒有辦法在發送后立即刪除它們? 我應該使用后台線程嗎? Application_Start或Application_End中的東西?
Graphviz創建客戶端,並將它們添加為頁面中的鏈接。 所以你不能直接刪除它們。
有幾種方法:
請注意,您不應該刪除僅在一秒鍾之前創建的圖像。 由於它們可以使用。
你不能通過控制器或使用ASHX( http://www.marklio.com/marklio/CommentView,guid,df8d6471-83fd-4f66-a799-ef8274979f0e.aspx )流出內容並刪除完成寫出流后的臨時文件?
使用其他用戶描述的方法但是如果想要圖像再次通過在響應中設置Last-Modifed標頭然后在圖像處理程序中獲得If-Modified-Since標頭,則要求瀏覽器使用其緩存,處理程序應該回復使用StatusCode 304“NOT Modified”,只要客戶端瀏覽器尚未清除其緩存,圖像仍會顯示。
我喜歡在生成它們的同一個動作中處理由動作創建的臨時文件。 例如:(在MVC中,但這適用於任何框架)
public ActionResult Foo()
{
FooCleanup(); // deletes files in "~/temp/Foo/" older than a day or so
string filename = CreateTemporaryFile(); // Creates a temporary file like "~/temp/Foo/{timestamp}.foo"
return File(filename);
}
如果Foo()被大量調用,你可以添加一些邏輯,只是經常調用cleanup。 這有點像窮人的cron工作,但效果很好。
您可以創建一個處理程序(.ashx)並通過它傳輸臨時文件。 這樣您就會知道該文件已經轉移到客戶端,您可以刪除處理程序末尾的臨時文件。
可能的問題是客戶端將無法下載文件兩次,因為您要立即刪除它。 (然后可以使用頁面輸出緩存來緩解...)
雖然最好的辦法就是如果你可以完全避免臨時文件問題 ,並根據請求流出文件,通過在處理程序中生成它...
我們使用帶有計時器類型的application_start以每24小時的間隔運行,並每天清理/刪除臨時文件文件夾一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.