2012-04-05 96 views
3

我有這個頁面,用戶可以上傳文檔(多個文檔,每個大小限制爲10MB)。這是一個兩步過程。步驟1有輸入表單。第2步是帶有提交按鈕的預覽頁面。上傳多個/大文件

我應該如何處理用戶在預覽頁面上關閉瀏覽器而不提交表單的場景?我應該在步驟1之後將文件保存在臨時位置嗎?這是一個體面的解決方案?

上傳(合理)大型文件的最佳做法是什麼?

謝謝。

回答

0

只能在提交表單的使用臨時文件夾中的文件保存文件,並複製到它們的最終位置。

無論如何,最好是實現一個垃圾回收器。垃圾收集器可以每晚清空臨時文件夾。但是,當使用垃圾回收器時,如果您有辦法識別未提交的文件(例如,如果在提交時將一行添加到數據庫中),則可以從頭開始將文件放在最終位置,然後讓垃圾收集器每天晚上將它們移除。

使用JQuery UI插件(如Uploadify:http://www.uploadify.com/)可以上傳大文件。 您應該注意,它使用閃光燈,一方面非常適合上傳大文件,另一方面它會阻止您的應用程序支持蘋果機器,如iPad。

0

如果用戶離開,那麼讓他們重新開始。他們很可能離開有一個很好的理由。如果發生事故,請將責任留在最後。如果您選擇在未提交數據的情況下存儲數據,則可能會導致惡意用戶利用您的存儲空間。

您還可以查看稱爲分塊的進程。

對於在文件上傳MVC3深入的討論更,請參閱本SO帖子:MVC 3 file upload and model binding

+0

「如果用戶離開,那麼讓他們重新開始。」 - 我將不得不在第1步後保存文件,對吧? – user471317 2012-04-06 00:03:15

+0

@ user471317 - 您可以使用PRG模式將文件放入「TempData」中。如果您在步驟1之後保存文件,那麼爲什麼要讓它們預覽?是否有通過取消按鈕涉及的刪除功能?一旦他們決定接受,是否設置了旗幟?我問的原因是你將不得不做一些審計,以確定如何刪除在第2步之後沒有提交的文件。並且如果用戶不必在步驟2中單擊接受,那麼他們只會執行步驟1並在別處導航以節省時間。 – 2012-04-06 00:26:14

+0

「如果您在步驟1之後保存文件,那麼爲什麼要讓它們預覽?」 - 我不想在步驟1之後保存文件。您建議在步驟1之後將文件保存在TempData中? – user471317 2012-04-08 21:25:45