SpringBoot实现接口提供下载文件

简介: SpringBoot实现接口提供下载文件

public ResponseEntity export(File file) {

    if (file == null) {
        return null;
    }
    HttpHeaders headers = new HttpHeaders();
    headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
    headers.add("Content-Disposition", "attachment; filename=" + System.currentTimeMillis() + ".xls");
    headers.add("Pragma", "no-cache");
    headers.add("Expires", "0");
    headers.add("Last-Modified", new Date().toString());
    headers.add("ETag", String.valueOf(System.currentTimeMillis()));

    return ResponseEntity
            .ok()
            .headers(headers)
            .contentLength(file.length())
            .contentType(MediaType.parseMediaType("application/octet-stream"))
            .body(new FileSystemResource(file));
}

@RequestMapping("/getExcel")

public ResponseEntity<FileSystemResource> getUserExcel(@RequestParam(required=false) String fromId,@RequestParam(required=false) String type) throws Throwable {
    logger.debug("获取用户excel参数:fromId=",fromId);
    Children children = depthFindParentId(fromId, new Children());
    File file = getExcelFile(children);
    return export(file);
}

亲测可用

加一个递归函数:

public Children depthFindParentId( String parentId,Children child) throws Throwable {

    Children children = _ucApi.findChildren( parentId, true, true, true, null);
    child.getUsers().addAll(children.getUsers()); //用户
    child.getDepartments().addAll(children.getDepartments());//部门
    if (children.getDepartments().size() > 0) {
        for (Department dep : children.getDepartments()) {
            depthFindParentId(dep.getId(),child);
        }
    }
    return child;
}

 文件不落地

@RequestMapping("/excelExample")

public ResponseEntity<byte[]> excel() throws IOException {
    // 创建工作薄
    HSSFWorkbook workbook = new HSSFWorkbook();
    // 创建用户工作表
    HSSFSheet sheet = workbook.createSheet("用户列表");
    HSSFRow rows = sheet.createRow(0);
    rows.createCell(0).setCellValue("用户ID");
    rows.createCell(1).setCellValue("姓名");
    rows.createCell(2).setCellValue("手机号");
    rows = sheet.createRow(0);
    rows.createCell(0).setCellValue("栏目ID");
    rows.createCell(1).setCellValue("栏目名称");

    sheet = workbook.createSheet("部门列表");
    rows = sheet.createRow(0);
    rows.createCell(0).setCellValue("部门ID");
    rows.createCell(1).setCellValue("部门名称");

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    try {
        workbook.write(outputStream);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        outputStream.close();
    }
    HttpHeaders httpHeaders = new HttpHeaders();
    String fileName = new String("用户部门.xls".getBytes("UTF-8"), "iso-8859-1");
    httpHeaders.setContentDispositionFormData("attachment", fileName);
    httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    ResponseEntity<byte[]> filebyte = new ResponseEntity<byte[]>(outputStream.toByteArray(), httpHeaders, HttpStatus.CREATED);
    try {
        outputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        outputStream.close();
    }
    return filebyte;
}
相关文章
|
13天前
|
安全 NoSQL Java
SpringBoot接口安全:限流、重放攻击、签名机制分析
本文介绍如何在Spring Boot中实现API安全机制,涵盖签名验证、防重放攻击和限流三大核心。通过自定义注解与拦截器,结合Redis,构建轻量级、可扩展的安全防护方案,适用于B2B接口与系统集成。
190 3
|
4月前
|
算法 网络协议 Java
Spring Boot 的接口限流算法
本文介绍了高并发系统中流量控制的重要性及常见的限流算法。首先讲解了简单的计数器法,其通过设置时间窗口内的请求数限制来控制流量,但存在临界问题。接着介绍了滑动窗口算法,通过将时间窗口划分为多个格子,提高了统计精度并缓解了临界问题。随后详细描述了漏桶算法和令牌桶算法,前者以固定速率处理请求,后者允许一定程度的流量突发,更符合实际需求。最后对比了各算法的特点与适用场景,指出选择合适的算法需根据具体情况进行分析。
376 56
Spring Boot 的接口限流算法
|
7月前
|
XML Java Maven
springboot-多环境配置文件
本文介绍了如何创建开发和生产环境的配置文件,并在IDEA和Maven中进行配置。开发环境中,通过设置profile为`dev`来指定配置文件;生产环境中,使用Maven命令参数`-Pprod`打包并指定配置文件。公共配置可放在`application.yml`中统一管理。日志配置需确保`logback-spring.xml`中的profile正确,以保证日志正常输出。
363 4
springboot-多环境配置文件
|
6月前
|
XML 前端开发 Java
SpringBoot实现文件上传下载功能
本文介绍了如何使用SpringBoot实现文件上传与下载功能,涵盖配置和代码实现。包括Maven依赖配置(如`spring-boot-starter-web`和`spring-boot-starter-thymeleaf`)、前端HTML页面设计、WebConfig路径映射配置、YAML文件路径设置,以及核心的文件上传(通过`MultipartFile`处理)和下载(利用`ResponseEntity`返回文件流)功能的Java代码实现。文章由Colorful_WP撰写,内容详实,适合开发者学习参考。
548 0
|
8月前
|
存储 前端开发 Java
Springboot静态资源映射及文件映射
在Spring Boot项目中,为了解决前端访问后端存储的图片问题,起初尝试通过静态资源映射实现,但发现这种方式仅能访问打包时已存在的文件。对于动态上传的图片(如头像),需采用资源映射配置,将特定路径映射到服务器上的文件夹,确保新上传的图片能即时访问。例如,通过`addResourceHandler(&quot;/img/**&quot;).addResourceLocations(&quot;file:E:\\myProject\\forum_server\\&quot;)`配置,使前端可通过URL直接访问图片。
441 0
Springboot静态资源映射及文件映射
|
4月前
|
Java API 网络架构
基于 Spring Boot 框架开发 REST API 接口实践指南
本文详解基于Spring Boot 3.x构建REST API的完整开发流程,涵盖环境搭建、领域建模、响应式编程、安全控制、容器化部署及性能优化等关键环节,助力开发者打造高效稳定的后端服务。
515 1
|
7月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
8月前
|
监控 Java Spring
SpringBoot:SpringBoot通过注解监测Controller接口
本文详细介绍了如何通过Spring Boot注解监测Controller接口,包括自定义注解、AOP切面的创建和使用以及具体的示例代码。通过这种方式,可以方便地在Controller方法执行前后添加日志记录、性能监控和异常处理逻辑,而无需修改方法本身的代码。这种方法不仅提高了代码的可维护性,还增强了系统的监控能力。希望本文能帮助您更好地理解和应用Spring Boot中的注解监测技术。
265 16
|
11月前
|
Java 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
584 1
SpringBoot获取项目文件的绝对路径和相对路径
|
11月前
|
网络协议 Java
springboot配置hosts文件
springboot配置hosts文件
161 11