栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot文件下载功能开发!

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot文件下载功能开发!

1L祭天

近期挤到一个需求 基于docker集群部署的环境下载各个服务器节点上的日志文件(对应的服务文件路径已经做了映射)

首先来看一下架构


思路: 所有的服务都有主备之分,收集日志的思路即是在每个机器节点上安装一个monitor.jar的监控服务,通过当前主程序去调用monitor 然后返回对应的数据

主程序代码如下

public class LogDownloadController {

    @GetMapping("loadLOgList")
    public Resp loadLOgList(@RequestParam("remoteIp") String remoteIp,@RequestParam("appName") String appName) {
        List 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> files(@PathVariable("appName") String appName) {
        List 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 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)

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988045.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号