Spring Boot集成Apache POI导出XLS文件失败:未触发下载内容显示于页面
解决Excel导出未触发下载、数据直接显示在页面的问题
嘿,我看了你的代码,问题其实出在控制器的响应头配置上,有两个小细节没做好:
- 响应头名称拼写错误:你在设置
Content-Dispotion的时候少写了一个's'!正确的响应头应该是Content-Disposition,这个错误会让浏览器完全忽略“附件下载”的指令,直接把Excel的二进制数据当成页面文本显示出来。 - 缺少文件类型声明:没有给响应设置正确的
Content-Type,浏览器没法判断这是一个Excel文件,自然不会触发下载行为。
给你修正后的控制器代码:
@GetMapping("/descargar") public ResponseEntity<InputStreamResource> exportData() throws Exception { ByteArrayInputStream stream = clienteService.exportData(); HttpHeaders headers = new HttpHeaders(); // 修正拼写错误的响应头名称 headers.add("Content-Disposition", "attachment; filename=clientes.xls"); // 添加Excel文件的Content-Type headers.add("Content-Type", "application/vnd.ms-excel"); return ResponseEntity.ok() .headers(headers) .contentType(MediaType.parseMediaType("application/vnd.ms-excel")) .body(new InputStreamResource(stream)); }
另外再提个小建议:你的ClienteService里创建HSSFWorkbook(对应xls格式)是没问题的,如果后续要支持xlsx格式,可以换成XSSFWorkbook,记得同步修改Content-Type为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet。
内容的提问来源于stack exchange,提问作者Dorian Gray
相关产品推荐
相关产品推荐

