• springboot文件下载功能开发!


    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)

     

  • 相关阅读:
    个推TechDay直播回顾 | 详解数据指标体系设计与开发全流程(附视频及课件下载)
    2.Spring源码IOC脉络
    【Luogu】 P3206 [HNOI2010] 城市建设
    MATLAB算法实战应用案例精讲-【优化算法】树木生长算法(TGA)(附MATLAB代码实现)
    慧通编程第4关 - 魔法学院第6课
    MFC静态编译,出现链接错误-库冲突(libcmt.lib和libcmtd.lib)
    【计算机网络】网络层——IP协议
    Qt 5.9.5 2D图形汇总
    vuex入门
    双十一攒幸运值领红包,2022年天猫双11预售活动解读
  • 原文地址:https://blog.csdn.net/weixin_70730532/article/details/125407368