2011-08-22 88 views
5

我有一個Web窗體,允許用戶在我們的系統中打開票證時上傳文件。 上傳使用「ajax控件工具包」asyncFileUpload控件完成。ASP.NET - 存儲臨時文件

這個想法是將文件保存到臨時目錄,並且只有當用戶點擊「提交」按鈕時纔將它們保存到永久位置。

我希望能夠擺脫不再相關的臨時文件(例如,用戶在不發佈表單的情況下將用戶離開頁面一個月)。

永久保留臨時文件的最佳方法是什麼? 也許讓他們的文件在會話中? 也許讓他們在視圖狀態?

我可以通過超時添加一些JS到頁面,並添加一些用戶離開頁面時運行的代碼。但這些想法是客戶端解決方案。我不希望有人篡改代碼,並在我的系統上留下垃圾。

還有其他想法嗎?

感謝, Summerbulb

+0

這是什麼意思?它是服務器上的臨時位置,還是完全不想下載文件? – Ankit

+0

@Ankit:僅當用戶決定發佈表單時才需要這些文件。否則,他們應該被清除。 – summerbulb

回答

3

我的建議是在Global.asax中添加一個On_SessionEnd處理程序,並在用戶會話結束時刪除臨時文件。你可以命名附加SessionID的臨時文件給它們(或者預先設置SessionID,無論你想要什麼),這樣你只會刪除會話結束的用戶的文件。您還可以將一個On_Application_End處理程序添加到Global.asax以刪除臨時目錄中的所有文件。

7

也許讓他們文件的會議?

不會。這會不必要地使用大量的服務器內存,用戶可能通過上傳大文件而對整體服務器性能產生不利影響。

也許讓他們在視圖狀態?

號這實際上意味着,每一個後回將涉及上載(下載)再次文件沒有任何理由。應用程序性能會顯着下降,並且提供糟糕的用戶體驗(更不用說通過帶寬吃飯,這可能會花費你的錢)。


這些文件正在存儲在服務器的臨時位置,對吧?應用程序跟蹤某種數據存儲中的文件信息(我假設一個SQL數據庫)?我建議有一個單獨的應用程序來處理清理,特別是因爲你正在談論一個月的規模。

Windows服務或計劃的控制檯應用程序可以很好地完成這項工作。它可以定期檢查目錄和數據庫,並根據您提供的任何規則執行一些清理。甚至可以使用票務系統中可能存在的任何消息傳遞機制來通知用戶此操作,通知管理員等。

+1

如果你確實有一個SQL Server,請考慮每晚運行的SSIS包。你幾乎可以用它做任何事情,並且計劃安排很簡單。節拍有另一個完整的應用程序來跟蹤。 – Bill

+0

+1。服務是正確的路要走。另一種方法是檢查sessionStart事件中是否有太舊的文件,但服務器需要刪除文件的時間,用戶必須等待第一次訪問。我建議使用這種服務的這個 – citronas

+0

@citronas:的確,我肯定會遠離任何網站事件這樣的事情。這是一個基於時間的操作,而不是請求/響應操作(這是Web應用程序的用途)。我也喜歡比爾對SSIS的建議,我對維護這些建議不太熟悉。 (我認爲「有另一個完整的應用程序來跟蹤」也是微不足道的,但這不是在這裏,也不是在那裏。在服務器上安排一個預定作業的整體觀點仍然存在。) – David

1

您可以將文件存儲在用戶的臨時文件夾中。這是否是在您的特定情況的好方法,我不能肯定地說:

var dir = System.IO.Path.GetTempPath(); 

的路徑將取決於當前的(Windows)中的用戶,雖然。

http://msdn.microsoft.com/en-us/library/system.io.path.gettemppath.aspx

+0

這怎麼可能?你的意思是保存在服務器的TEMP文件夾中?然後再次,服務器必須重新啓動臨時文件夾清理之前或類似的東西。 – highwingers

0

在提交可以發出System.IO.File.Move()命令。如果您有權訪問服務器來執行此操作,則可以使用服務或控制檯應用程序刪除其餘文件。