java 提供文件下载接口_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 getUserExcel(@RequestParam(required=false) String fromId,@RequestParam(required=false) String type) throws Throwable {

logger.debug("获取用户excel参数:fromId=",fromId);

Children children= depthFindParentId(fromId, newChildren());

File file=getExcelFile(children);returnexport(file);

}

亲测可用

加一个递归函数:

publicChildren 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);

}

}returnchild;

}

文件不落地

@RequestMapping("/excelExample")

public ResponseEntity 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 filebyte = new ResponseEntity(outputStream.toByteArray(), httpHeaders, HttpStatus.CREATED);

try {

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

} finally {

outputStream.close();

}

return filebyte;

}

好的,以下是一个简单的 SpringBoot 实现 API 接口多版本支持的示例代码: 首先,在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>swagger-bootstrap-ui</artifactId> <version>1.9.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.2</version> </dependency> ``` 然后,创建一个 Controller 类,示例代码如下: ```java @RestController @RequestMapping("/api/v{version}") public class ApiController { @GetMapping("/hello") public String hello(@PathVariable String version) { return "Hello from API version " + version; } } ``` 在上述示例代码中,我们使用了 `@RequestMapping` 注解来指定 API 接口的版本,即 `/api/v{version}`,其中 `{version}` 是一个占位符,表示版本号,例如 `/api/v1`。 接下来,我们需要创建一个拦截器来判断访问的 API 接口版本号,示例代码如下: ```java @Component public class ApiVersionInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String version = request.getHeader("version"); if (StringUtils.isEmpty(version)) { version = "1"; } request.setAttribute("version", version); return true; } } ``` 在上述示例代码中,我们通过 `HttpServletRequest` 获取请求头中的 `version` 参数,并将其存储在请求属性中,以便后续的 Controller 中可以获取到。 最后,我们需要在 SpringBoot 的配置文件中配置拦截器,示例代码如下: ```java @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Autowired private ApiVersionInterceptor apiVersionInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(apiVersionInterceptor).addPathPatterns("/api/**"); } } ``` 在上述示例代码中,我们通过 `addInterceptor` 方法将拦截器添加到拦截器链中,并指定需要拦截的 API 接口路径为 `/api/**`。 现在,我们就可以在 Controller 中通过 `@PathVariable` 注解获取请求路径中的版本号,示例代码如下: ```java @RestController @RequestMapping("/api") public class ApiController { @GetMapping("/hello") public String hello(@PathVariable String version) { return "Hello from API version " + version; } } ``` 至此,我们就完成了 SpringBoot 实现 API 接口多版本支持的示例代码。当客户端访问 `/api/v1/hello` 时,将返回 `Hello from API version 1`,当访问 `/api/v2/hello` 时,将返回 `Hello from API version 2`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值