机缘
项目要求:提供一个接口把服务器中的日志导出来
收获
自己利用流的方式进行处理,测试后比很多博主用的快
步骤
- 知道项目中日志位置
- 写一个接口
- 给方法去一个见名知义的英文名
- 看看代
码:@GetMapping("/download/{type}") public LinResponse download(@PathVariable String type, HttpServletResponse response) throws Exception { try { // 服务器文件路径 String fwPath = "D:\\home\\admin\\noautobreakerwarning\\logs"; //String fwPath = "/home/admin/noautobreakerwarning/logs"; // 下载文件 RemoteCommandUtil.downloadFile(type, fwPath, response); return LinResponse.Builder.buildSucced(); } catch (Exception e) { log.error("导出日志文件出现异常,请查看详情:{}", ExceptionUtils.getStackTrace(e)); throw new NoAutoBreakerException(27, "当前没有这个文件日志"); } } /** * - 实现下载服务器上的文件到本地指定目录 */ public static void downloadFile(String type, String basePath, HttpServletResponse response) throws IOException { String path; if (!idNumberStr(type)) { path = basePath + "/" + type + ".log"; } else { path = basePath + "/" + type + ".bak"; } File file = new File(path); if (!file.exists()) { throw new NoAutoBreakerException(27, "当前没有这个文件日志"); } BufferedInputStream sis = new BufferedInputStream(new FileInputStream(file)); BufferedOutputStream fos = new BufferedOutputStream(response.getOutputStream()); try { byte[] b = new byte[4096]; int i; while ((i = sis.read(b)) != -1) { fos.write(b, 0, i); } log.info("下载完成"); } catch (IOException e) { log.info("文件不存在或连接失败"); e.printStackTrace(); } finally { log.info("服务关闭"); fos.flush(); fos.close(); sis.close(); } }