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;
}
相关文章
|
16天前
|
Java 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
53 1
SpringBoot获取项目文件的绝对路径和相对路径
|
10天前
|
网络协议 Java
springboot配置hosts文件
springboot配置hosts文件
38 11
|
27天前
|
XML Java Kotlin
springboot + minio + kkfile实现文件预览
本文介绍了如何在容器中安装和启动kkfileviewer,并通过Spring Boot集成MinIO实现文件上传与预览功能。首先,通过下载kkfileviewer源码并构建Docker镜像来部署文件预览服务。接着,在Spring Boot项目中添加MinIO依赖,配置MinIO客户端,并实现文件上传与获取预览链接的接口。最后,通过测试验证文件上传和预览功能的正确性。
springboot + minio + kkfile实现文件预览
|
16天前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
55 8
|
16天前
|
存储 前端开发 JavaScript
|
16天前
|
存储 Java API
|
21天前
|
Java 开发者 Spring
精通SpringBoot:16个扩展接口精讲
【10月更文挑战第16天】 SpringBoot以其简化的配置和强大的扩展性,成为了Java开发者的首选框架之一。SpringBoot提供了一系列的扩展接口,使得开发者能够灵活地定制和扩展应用的行为。掌握这些扩展接口,能够帮助我们写出更加优雅和高效的代码。本文将详细介绍16个SpringBoot的扩展接口,并探讨它们在实际开发中的应用。
37 1
|
27天前
|
存储 安全 Java
|
27天前
|
存储 算法 安全
SpringBoot 接口加密解密实现
【10月更文挑战第18天】
|
1月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。