excel文件下載成功后打開文件遇到錯誤
之前的下載代碼:
private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) { try { response.setCharacterEncoding("UTF-8"); response.setHeader("content-Type", "application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); workbook.write(response.getOutputStream()); } catch (IOException e) { try { throw new Exception(e.getMessage()); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }
改正后的下載代碼:
private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) { try (OutputStream out = response.getOutputStream()) { response.setCharacterEncoding("UTF-8"); response.setHeader("content-Type", "application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); ByteArrayOutputStream baos = new ByteArrayOutputStream(); workbook.write(baos); response.setHeader("Content-Length", String.valueOf(baos.size())); out.write( baos.toByteArray() ); } catch (IOException e) { try { throw new Exception(e.getMessage()); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }
原因:Debug發現請求頭的Content-Length,在未設置的情況在是-1,下載時需重新定義Content-Length