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