业余时间整理一下日常工作中的收获,希望对大家有用的话,多多点赞收藏
public void downloadExcelTemplate(HttpServletRequest request, HttpServletResponse response) { String fileName = "xxx"; //下面是源文件的路径,也可以自己定义,例如:D:\TEMPLATE\ //ExcelTemplateDTO excelTemplateDTO = //sysCfgService.getValueObject("EXCEL_TEMPLATE_PARAM", ExcelTemplateDTO.class); String filePath = excelTemplateDTO.getExportTemplateUrl() + File.separator + fileName + ".xlsx"; log.info("导入模板路径" + filePath); FileInputStream fin = null; FileChannel channel = null; try { request.setCharacterEncoding("UTF-8"); File file = new File(filePath); long fileLength = file.length(); fin = new FileInputStream(file); //对中文名进行编码,解决中文乱码 String encodedFileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); //指定文件下载,并解决中文名乱码 response.setHeader("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + encodedFileName);//重点 response.setHeader("Content-Length", String.valueOf(fileLength)); response.setContentType("application/octet-stream"); response.setContentType("application/force-download"); channel = fin.getChannel(); int buffSize = 1024; ByteBuffer buffer = ByteBuffer.allocate(4096); byte[] byteArr = new byte[buffSize]; int nGet = 0; while (channel.read(buffer) != -1) { buffer.flip(); while (buffer.hasRemaining()) { nGet = Math.min(buffer.remaining(), buffSize); // read bytes from disk buffer.get(byteArr, 0, nGet); // write bytes to output response.getOutputStream().write(byteArr); } buffer.clear(); } } catch (Exception e) { log.error("下载Excel模板失败"); e.printStackTrace(); } finally { if (channel != null && fin != null) { try { channel.close(); fin.close(); } catch (IOException e) { e.printStackTrace(); } } } }