gpt4 book ai didi

spring - spring下载pdf后重定向

转载 作者:行者123 更新时间:2023-12-01 23:50:54 24 4
gpt4 key购买 nike

我正在使用 Spring Boot 。我编写了将数据上传到数据库的代码。如果出现问题,数据将以 pdf 格式下载,这是错误的。我想做的是,我必须下载该 pdf 并直接转到另一个页面。

@RequestMapping(value = "/doUpload", method = RequestMethod.POST)
public void doUpload(@ModelAttribute("employeeCsvForm") EmpFileUpload fileUpload,HttpServletRequest request, HttpServletResponse response){

// codes for create pdf.

if (errorCount != 0) { //errorCount is the count of error data

File fileEmp = new File("error.pdf");

//downloading the pdf in browser path
if (fileEmp.exists()) {
FileUtils.copyFile(fileEmp, response.getOutputStream());
response.setContentType("application/pdf");
response.setHeader("Content-disposition", "attachment;filename=error.pdf");
response.flushBuffer();
}
}
}

此代码下载 pdf 文件。但我必须重定向到另一个页面,所以我使用了

response.sendRedirect(request.getContextPath() + "/employee/errorCsv"); after response.flushBuffer(); 成功下载 pdf 但是显示以下错误

错误是:已为此响应调用 getOutputStream()

当我在 response.flushBuffer(); 之前编写重定向代码 response.sendRedirect(request.getContextPath() + "/employee/errorCsv"); 时,它的定向成功转到其他页面,但未下载

我想两者兼而有之,我尽力了,但失败了。提前致谢。

最佳答案

启动下载后您无法重定向。

这就是为什么每个下载时重定向的页面(例如 Sourceforge)都会这样做:

  • 首先将您重定向到目标页面
  • 等待几秒钟(可能是可选的,但可能有助于加载目标页面)
  • 然后使用 Javascript 启动下载(对于浏览器,这实际上是另一个重定向)
<小时/>

从技术上讲,HTTP 重定向是 HTTP header 的一部分。 header 在任何实际内容之前通过 HTTP 发送,一旦开始发送正文(内容)就无法发送 - 这就是您收到错误的原因。

对于浏览器来说,下载只是一种特殊的页面访问 - 最终下载数据而不是将其显示为网站。现在,您只能在网站中发起重定向(即引导浏览器访问另一个页面),如果下载则无法执行此操作。因此以下步骤顺序不可能起作用:

  • 访问初始页面
  • 在初始页面,直接浏览器下载文件
  • 直接浏览器访问目标页面

所以你要做的就是交换步骤:

  • 访问初始网站
  • 初始页面,直接浏览器访问目标页面
  • 在目标页面,直接浏览器下载文件

关于spring - spring下载pdf后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47809044/

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