2010-01-06 65 views
4

最近,我正在我們的Web應用程序中顯示工作流圖表圖像。我設法使用重新託管的WF設計器並在服務器上即時創建圖像,但是想象出工作流程圖可以很快變得多大,我想通過使用一些Ajax控件來顯示圖像,從而提供更好的用戶體驗支持縮放&平移功能。如何處理ASP.NET應用程序中的臨時文件

我碰巧遇到了seadragon的網站,這似乎只是我可以使用的一部驚人的作品。只有一個缺點 - 爲了使用它們的庫來生成圖像的深度縮放版本,我必須使用服務器上的文件結構。由於我使用的圖像具有臨時性(具有進度指示器的工作流程圖),因此重要的是不僅能夠創建此類圖像,還要在一段時間後襬脫它們。

現在的問題是如何最好地確保臨時圖像文件和文件夾層次結構可以在服務器(ASP.NET Web應用程序)上創建,並在稍後清理完畢。我正在考慮使用緩存功能並通過緩存項到期刪除相應的圖像文件夾層次結構,或者乾脆在Global.asax的Application_Start和Application_End中刪除整個臨時文件夾的內容,但我並不確定這是否是一個好主意,以及是否存在一些安全限制或文件系統相關的麻煩。你怎麼看 ?

回答

2

我們爲創建PDF報告做了類似的事情,發現最簡單的方法是使用時間戳檢查來確定「舊」文件的大小,然後根據一段時間刪除它們,在我們的案例中多於2小時舊。這是在創建下一個PDF文檔之前完成的,但是作爲創建過程的一部分。我們還創建了一個特定的文件夾,並賦予ASP.Net用戶對該文件夾的讀/寫訪問權限。

唯一的缺點是,如果創建PDF的過程沒有經常使用,會有文件的堆積,但最終會清理它們。在2年時間裏,關閉4000個PDF文件,我們還沒有這樣做的錯誤。

+0

這似乎是一個好主意,在創建新文件時擺脫舊文件。唯一讓我擔心的是許可 - 我不確定我們是否可以爲所有在其網絡服務器上使用該產品的客戶做到這一點。 – 2010-01-06 19:14:46

+0

通常它不應該是一個主要問題。不過如前所述,您始終可以使用App_Data或其中的文件夾。 – BinaryMisfit 2010-01-06 21:15:36

+0

如果您允許用戶有機會允許上傳到某個文件夾,我會建議使用虛擬目錄用於安全目的。請記住,如果文件通過URL訪問extern,您需要拒絕「腳本性能」(或者調用IIS中的屬性)以獲得更高的安全性。 – citronas 2010-01-06 23:48:15

0

首先,你必須確保你的IIS工作進程有權寫入/刪除緩存目錄中的文件(和你的網站不休息,以防萬一)

2日,我會遠離使用App_Start和App_End,應用程序結束清理文件並不是100%保證觸發,並且最終可能會有越來越多的孤立圖像。

我會改爲預定的過程,可能每小時運行一次,或者每天運行一次,具體取決於您想要的。並檢查緩存中每張圖片的年齡,並且如果它早於您的任意「過期時間」,則將其刪除。

除此之外,沒有多少。

1

使用App_Data文件夾。該文件夾位於您的應用程序內部,可由您的應用程序寫入,而不必脫離應用程序的上下文,但它也可以隨意瀏覽。它意味着爲您的應用程序保存數據文件。

Application_Start和Application_End每次只會觸發一次,所以如果您需要更好的清理,我會考慮使用緩存結構或簡單的Windows服務來處理清理。

+0

其實我想在我的應用程序的結構中使用一些圖像文件夾,只是爲了能夠提供這些(儘管是臨時的)文件。原因是seadragon生成這個文件夾結構,客戶端使用它來請求圖像的正確部分。使用App_Data文件夾有什麼優勢(例如在權限或其他方面)? – 2010-01-06 17:14:29

相關問題