当前位置: 代码迷 >> 综合 >> springBoot文件下载出现 Cannot call sendError() after the response has been committed异常
  详细解决方案

springBoot文件下载出现 Cannot call sendError() after the response has been committed异常

热度:24   发布时间:2023-12-24 03:04:17.0

出现是因为多次response响应导致的,http协议每次响应完就关闭了socket,所以多次发送response就会出现这个问题

@RequestMapping("/download")public int addNav(String name,HttpServletResponse response) {System.out.println(name);File file = new File(LoadNovelFile.staticPath+"/"+name+".txt");if(file.exists()){//配置文件下载response.setHeader("content-type", "application/octet-stream");response.setContentType("application/octet-stream");// 下载文件能正常显示中文try {response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(name+".txt", "UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}byte[] buffer = new byte[1024];BufferedInputStream bis = null;try {bis = new BufferedInputStream(new FileInputStream(file));OutputStream os = response.getOutputStream();int i = bis.read(buffer);while(i != -1){ os.write(buffer, 0, i);os.flush();i = bis.read(buffer);}} catch (Exception e) {e.printStackTrace();}finally {try {bis.close();} catch (IOException e) {e.printStackTrace();}}}return 0;}

  上述是我的下载文件代码。

 后来我发现我的类使用@RestController注解,所以每个方法的返回值是通过response响应出去,所以这里就出现了第二次response的问题。

所以解决办法就是:把返回值int改为void就可以。 

  相关解决方案