gpt4 book ai didi

java - spring mvc中生成文件流程更新

转载 作者:行者123 更新时间:2023-11-30 06:31:03 25 4
gpt4 key购买 nike

单击按钮时,我想调用我的服务来查询数据库并生成 csv 文件并返回给用户。此过程运行时间较长(最多可能需要 40 秒),我不想阻止用户。我想创建“进度”页面,用户可以在其中跟踪报告生成的进度:

我的想法是:

获取用户的输入并向服务提交 createReport 请求。不等待响应,将报告 ID 返回给用户。新选项卡将打开,用户可以在其中监视报告生成的状态用户可以检查报告页面以查看其请求的状态请求准备就绪后 - 将在浏览器中开始下载报告。

我想要这样的东西:

a.保存文件并返回文件 ID 的 Controller 方法。之后,在此 Controller 中,新线程将调用 Service 并将数据写入给定文件b.使用请求参数 - fileId 显示报告状态的 Controller 方法检查文件是否生成如果生成文件 - 将文件写入 HttpServletResponse 响应

问题是:我应该在哪里存储文件 ID 以及如何连接文件 ID 和文件本身? (缓存?数据库?)

如何查看报告状态?我考虑每 1-2 秒发送一次 AJAX 请求吗?

有什么想法和建议吗?

最佳答案

据我所知,您可以创建一个 servlet 来响应 CSV 文件下载。考虑以下过程:

在按钮上单击打开带有 url 的新选项卡(附加带有 reportId 等的 url)

window.open('/downloadCSV/15646', '_blank');

然后为这个下载操作编写一个servlet

  @RequestMapping(path = "/downloadCSV/{reportId}", method = 
RequestMethod.GET)
public void getCSV(@PathVariable String reportId, HttpServletRequest
request, HttpServletResponse response) throws Exception {

byte[] fileContent;

//write your logic or call service to generate csv report and get
bytes of file

response.setContentType("provide content type");
ServletOutputStream out = response.getOutputStream();
out.write(fileContent);
out.flush();
return;
}

这将在打开的选项卡中下载文件

关于java - spring mvc中生成文件流程更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46120824/

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