springboot文件下载功能开发!
2023-09-11 14:16:32 时间
1L祭天
近期挤到一个需求 基于docker集群部署的环境下载各个服务器节点上的日志文件(对应的服务文件路径已经做了映射)
首先来看一下架构
思路: 所有的服务都有主备之分,收集日志的思路即是在每个机器节点上安装一个monitor.jar的监控服务,通过当前主程序去调用monitor 然后返回对应的数据
主程序代码如下
public class LogDownloadController { @GetMapping("loadLOgList") public Resp loadLOgList(@RequestParam("remoteIp") String remoteIp,@RequestParam("appName") String appName) { List<UploadFile> ja; try { String url = String.format("http://%s:%d/api/filelist/files/%s", remoteIp, 8887,appName); String res = HttpUtil.get(url, 1000); ja = JSONArray.parseObject(res, List.class); } catch (Exception e) { ja = Collections.emptyList(); log.error(e.getMessage()); } return Resp.OK(ja); } @GetMapping("loadLOgQue") public Resp loadLOgQue(@RequestParam("remoteIp") String remoteIp, @RequestParam("appName") String appName, @RequestParam("fileName") String fileName, HttpServletResponse httpServletResponse) { try { String url = String.format("http://%s:%d/api/filelist/files/%s/%s", remoteIp, 8887,fileName,appName); httpServletResponse.setContentType("application/x-download"); httpServletResponse.setHeader("content-Disposition", "attachment;filename=" + fileName); ServletOutputStream outputStream = httpServletResponse.getOutputStream(); HttpUtil.download(url, outputStream,true); } catch (Exception e) { log.error(e.getMessage()); } return Resp.OK("success"); } }
monitor服务代码如下:
@RestController @RequestMapping("api/filelist") public class FileListController { @Autowired FileStorageService fileStorageService; @GetMapping("/files/{appName}") public ResponseEntity<List<UploadFile>> files(@PathVariable("appName") String appName) { List<UploadFile> files = fileStorageService.loadListsByAppName(appName) .map(path -> { String fileName = path.getFileName().toString(); String url = MvcUriComponentsBuilder .fromMethodName(FileListController.class, "getFile", path.getFileName().toString(),appName ).build().toString(); return new UploadFile(fileName, url); }).collect(Collectors.toList()); return ResponseEntity.ok(files); } @GetMapping("/files/{filename:.+}/{appName}") public ResponseEntity<Resource> getFile(@PathVariable("filename") String filename,@PathVariable("appName") String appName) { Resource file = fileStorageService.load(filename,appName); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=\"" + file.getFilename() + "\"") .body(file); } }
如果本文对你有帮助,别忘记给我个3连 ,点赞,转发,评论,
咱们下期见!答案获取方式:已赞 已评 已关~
学习更多JAVA知识与技巧,关注与私信博主(03)
相关文章
- SpringBoot:上传单个图片,上传图片压缩包,读取本地磁盘图片
- Docker Compose:部署SpringBoot应用(含MySQL,Redis,Nacos,RabbitMQ,Nginx)
- SpringBoot学习总结
- SpringBoot读取resources下的文件以及resources的资源路径
- SpringBoot+vue实现文件下载
- SpringBoot不再需要Controller、Service、DAO、Mapper!这个工具很牛Dataway介绍
- 七个开源的 SpringBoot 前后端分离项目
- springboot 加载自定义yml文件
- SpringBoot入门-文件上传
- springboot的@Configuration文件读取static静态文件
- SpringBoot文件的上传与下载
- springBoot 自动装配,SpringBoot自动配置,SpringBoot自动加载
- SpringBoot+Mybaits搭建通用管理系统实例十三:数据导出功能实现
- SpringBoot+Mybaits搭建通用管理系统实例七:访问接口Api层功能实现
- SpringBoot之文件下载
- SpringBoot之文件上传
- 搞定SpringBoot多数据源(2):动态数据源
- 搞定SpringBoot多数据源(1):多套源策略
- SpringBoot实现oss文件的上传与下载
- idea开启springboot热部署,修改文件即时生效
- SpringBoot简单的REST风格例子
- springboot文件上传到本地电脑,项目目录,路径保存到数据库,页面显示上传的图片
- 撩对象神器,SpringBoot每天5:20定时发送浪漫语句给女朋友邮箱
- SpringBoot项目使用hutool工具进行HttpClient接口调用的处理(文件上传)
- springboot 中配置最大传输数据或上传文件的大小
- SpringBoot入门篇--关于properties和yml两种配置文件的一些事情