1
我有一個控制器,允許用戶下載文件。 問題是,根據發送給控制器的參數,控制器會壓縮不同的文件夾並將它們發送給客戶端,並且壓縮過程有時可能需要2分鐘時間,而提示用戶使用空白瀏覽器選項卡和加載標題時。Spring MVC - 如何顯示消息,直到下載開始
有沒有一種方法可以向用戶顯示一條消息,直到文件被壓縮並下載真正開始?諸如「請稍候,您的文件正準備下載!」
謝謝!
我有一個控制器,允許用戶下載文件。 問題是,根據發送給控制器的參數,控制器會壓縮不同的文件夾並將它們發送給客戶端,並且壓縮過程有時可能需要2分鐘時間,而提示用戶使用空白瀏覽器選項卡和加載標題時。Spring MVC - 如何顯示消息,直到下載開始
有沒有一種方法可以向用戶顯示一條消息,直到文件被壓縮並下載真正開始?諸如「請稍候,您的文件正準備下載!」
謝謝!
這不是特定於spring mvc - 你可以使用任何基於web的動作(如servlet或webwork/structs動作)來完成此操作。
用戶發送執行下載的請求不應該創建.zip,而是將創建zip的任務排隊,然後另一個線程(線程?)可以啓動並創建這些.zip文件。
例如,
class CreateZipController extends AbstractController {
//tokenService is soemthing that you can save a future with, and return a token for - can be anything reallly...like a map.
public ModelAndView handleRequestInternal(final HttpServletRequest request, HttpServletResponse response) throws Exception {
Future<ZipFile> zipTask = executorService.submit(new Callable<ZipFile>(){
public ZipFile call() {
return createZipFile(request);
}
});
String token = tokenService.saveTask(zipTask);
if (zipTask.isDone() {
ModelAndView mav = new ModelAndView("downloadView");
mav.addObject("url", getDownloadUrlFrom(zipTask.get().getName()));
return mav;
}
ModelAndView mav = new ModelAndView("waitView");
mav.addObject("message", "Please wait while zip is being created");
mav.addObject("token", token);
return mav;
}
}
class GetZipController extends AbstractController {
public ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
String token = request.getParameter("token");
Future<ZipFile> zipTask = tokenService.getTaskFrom(token);
if (zipTask.isDone() {
ModelAndView mav = new ModelAndView("downloadView");
mav.addObject("url", getDownloadUrlFrom(zipTask.get().getName()));
return mav;
} else {
ModelAndView mav = new ModelAndView("waitView");
mav.addObject("message", "please wait while the zip is being built");
return mav;
}
}
}
由於我不是太熟悉Spring MVC的,上面可能會稍微偏離(在庫名/公約的條款),但其基本思想是存在的 - 排隊的zip文件的創建作爲一個任務(使用類似ExecutorService的東西),然後快速渲染視圖。然後視圖本身會刷新(使用元刷新標記),或者AJAX輪詢另一個控制器以查看任務是否完成。如果是,則重定向到下載網址。
Hi Chii!感謝這篇文章,我會檢查這個並回復給你評論:) – 2010-12-13 14:39:05