我正在使用弹簧靴。我编写了将数据上传到数据库的代码。如果出现问题,数据将以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");
response.flushBuffer();
成功下载pdf 但显示错误后 response.sendRedirect(request.getContextPath() + "/employee/errorCsv");
。
错误是:已为此响应调用了getOutputStream()
当我在response.flushBuffer();
之前编写重定向代码1,2.2, 3.5 ,6, 7.7
时,它已成功指向其他网页但未下载。
我想做两件事,我尽我所能,但失败了。提前谢谢。
答案 0 :(得分:3)
在开始下载后,您无法重定向。
这就是为什么每个下载时重定向的页面(例如Sourceforge)通过以下方式执行此操作:
从技术上讲,HTTP重定向是HTTP标头的一部分。标题是在任何实际内容之前通过HTTP发送的,一旦您开始发送正文(内容)就无法发送 - 这就是您收到错误的原因。
对于浏览器,下载只是一种特殊的页面访问 - 最终下载数据而不是将其显示为网站。现在,您只能在网站中启动重定向(即直接浏览器访问另一个页面),如果下载则无法执行此操作。因此,以下步骤顺序不可行:
所以你需要做的是交换步骤: