gpt4 book ai didi

java - Spring MVC - 如何在下载开始前显示消息

转载 作者:行者123 更新时间:2023-11-29 06:17:45 25 4
gpt4 key购买 nike

我有一个允许用户下载文件的 Controller 。问题是,根据发送到 Controller 的参数, Controller 将压缩不同的文件夹并将它们发送到客户端,压缩有时需要 2 分钟,同时用户会收到一个空的浏览器选项卡和一个加载标题的提示。

在文件压缩并真正开始下载之前,有没有一种方法可以向用户显示消息?类似于“请稍候,正在准备下载您的文件!”

谢谢!

最佳答案

这并非特定于 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 的东西) ), 然后快速渲染 View 。然后 View 本身刷新(使用元刷新标记),或 AJAX 轮询另一个 Controller 以查看任务是否完成。如果是,则重定向到下载 url。

关于java - Spring MVC - 如何在下载开始前显示消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4427546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com