| | |
| | | } |
| | | |
| | | /** |
| | | * 判断是否为低版本浏览器 |
| | | * |
| | | * @param request 浏览器请求头 |
| | | * @return |
| | | */ |
| | | public static boolean isLowVersionBrowser(HttpServletRequest request) { |
| | | String userAgent = request.getHeader("User-Agent"); |
| | | return userAgent.contains("msie") |
| | | || userAgent.contains("Trident") |
| | | || userAgent.contains("Edge"); |
| | | } |
| | | |
| | | /** |
| | | * 设置导出Excel文件名称 |
| | | * @param response 返回数据 |
| | | * @param request 浏览器请求头 |
| | |
| | | //会清空响应缓冲区的内容,确保后续输出不会受到之前数据的影响 |
| | | response.reset(); |
| | | // 定义浏览器响应表头,顺带定义下载名 |
| | | if (isLowVersionBrowser(request)) { |
| | | fileName = URLEncoder.encode(fileName, "UTF8") + ".xlsx"; |
| | | response.setHeader("Content-Disposition", |
| | | "attachment;filename=" + fileName); |
| | | } else { |
| | | response.setHeader("Content-Disposition", |
| | | "attachment;filename=" + new String((fileName + ".xlsx").getBytes("gb2312"), "ISO8859-1")); |
| | | } |
| | | fileName = fileName + ".xlsx"; |
| | | // 对文件名进行URL编码,支持中文文件名 |
| | | String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); |
| | | // 使用 filename* 参数支持 UTF-8 编码(RFC 5987),同时保留 filename 参数兼容旧浏览器 |
| | | response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + |
| | | "\"; filename*=utf-8''" + encodedFileName); |
| | | // 定义下载的类型,标明是excel文件 |
| | | response.setContentType("application/vnd.ms-excel"); |
| | | response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); |
| | | response.setCharacterEncoding("utf-8"); |
| | | }catch (Exception e){ |
| | | log.error("{}设置导出Excel文件名称异常,{}", fileName, e.getMessage()); |
| | | } |