2011-12-08 28 views
2

我有一個Web應用程序,其中一個工作流程,用戶可以下載動態生成的文件。輸入是具有生成文件所需參數的表單。如何啓用從瀏覽器下載動態生成的文件?

我目前的解決方案是讓他們提交該servlet側I改變響應報頭這種形式& - 內容部署是一個附着&也提供一個適當的mime類型。

但我覺得這種方法是不夠的。由於文件生成可能需要很長時間,在這種情況下,在某些超時之後,我會直接在瀏覽器中獲得500或503錯誤。我想這是目前的方法預計。

我希望我的工作流程足夠靈活,以便在用戶提交表單時儘快告訴用戶文件可能需要一段時間才能生成&,我們將在文件準備就緒後立即顯示文件的鏈接。我想我也可以通過電子郵件發送文件或此消息給他們,但這並不理想。

你們可以給我一個解決這個問題的方法嗎?我應該更具體地提供信息嗎?任何幫助讚賞。

回答

1

如果你想這樣做,同步(即讓用戶等待文件準備就緒,而不是讓他們去關閉和做其他事情在等待)傳統方法是把他們帶到「報告加載」頁面。

這將是一個頁面:

  • 1)通知他們載入報告。
  • 2)刷新本身(或者在刷新時使用元刷新標記或JavaScript)
  • 3),檢查是否在報告準備好,並且:
    • 一個)返回到步驟1,如果它不是準備就緒
    • b)如果準備就緒,則爲他們提供文檔。

同步是那種老派的,但你的問題聽起來像這是你想要的方式。

異步方式將包括:

  • 使用AJAX來對文檔的鏈接出現在頁面上,一旦它已準備就緒。
  • 有一個單獨的頁面顯示以前生成的文檔。用戶可以在閒暇時進入該頁面,同時他們可以瀏覽網站的其他部分。這需要保留生成文檔的歷史記錄。
  • 按照您的建議,通過電子郵件發送。
1

您可以使用表單數據對服務器進行異步Ajax調用,而不是直接提交表單。 在服務器上創建臨時文件並使用下載URL向客戶端返回鏈接。 通過Javascript提交答案之後,您可以向用戶顯示提示,即下載鏈接將在一分鐘內顯示。不要忘記清理臨時文件!

提交Ajax調用我建議使用Javascript框架。看一看JQuery的:

http://api.jquery.com/category/ajax/

+0

好的,謝謝安德烈亞斯。我廣泛地在我的代碼庫中使用jQuery。:)和創建臨時文件一樣。有關文件,你會建議一個cron作業來清理這些文件或其他機制嗎? – Chantz

相關問題