From 0664eff151216c71debcddcce153be67ed9a9142 Mon Sep 17 00:00:00 2001 From: lijiahang Date: Mon, 22 Jul 2024 10:27:21 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20windows=20=E7=A7=BB=E5=8A=A8=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B1=E8=B4=A5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/AbstractTerminalHandler.java | 2 +- .../host/terminal/session/SftpSession.java | 6 ++- .../host/transfer/utils/TransferUtils.java | 2 +- .../service/impl/ExecCommandServiceImpl.java | 2 +- .../service/impl/ExecLogServiceImpl.java | 2 +- .../visor/module/asset/utils/SftpUtils.java | 46 +++++++++++++++++-- 6 files changed, 50 insertions(+), 10 deletions(-) diff --git a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/terminal/handler/AbstractTerminalHandler.java b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/terminal/handler/AbstractTerminalHandler.java index 4c59aaee..c92ce5f6 100644 --- a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/terminal/handler/AbstractTerminalHandler.java +++ b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/terminal/handler/AbstractTerminalHandler.java @@ -100,7 +100,7 @@ public abstract class AbstractTerminalHandler imp if (ex == null) { return null; } - if (ex instanceof InvalidArgumentException) { + if (ex instanceof InvalidArgumentException || ex instanceof IllegalArgumentException) { return ex.getMessage(); } return ErrorMessage.OPERATE_ERROR; diff --git a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/terminal/session/SftpSession.java b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/terminal/session/SftpSession.java index dac211bc..b41ed093 100644 --- a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/terminal/session/SftpSession.java +++ b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/terminal/session/SftpSession.java @@ -12,6 +12,7 @@ import com.orion.visor.framework.common.constant.Const; import com.orion.visor.framework.common.utils.Valid; import com.orion.visor.module.asset.handler.host.terminal.model.TerminalConfig; import com.orion.visor.module.asset.handler.host.terminal.model.response.SftpFileVO; +import com.orion.visor.module.asset.utils.SftpUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.web.socket.WebSocketSession; @@ -82,7 +83,10 @@ public class SftpSession extends TerminalSession implements ISftpSession { @Override public void move(String source, String target) { source = Valid.checkNormalize(source); - executor.move(source, target); + // 移动 + SftpUtils.move(executor, source, target); + // FIXME kit + // executor.move(source, target); } @Override diff --git a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/transfer/utils/TransferUtils.java b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/transfer/utils/TransferUtils.java index 1e91dc7b..38ba3287 100644 --- a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/transfer/utils/TransferUtils.java +++ b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/handler/host/transfer/utils/TransferUtils.java @@ -62,7 +62,7 @@ public class TransferUtils { public static String getErrorMessage(Exception ex) { if (ex == null) { return null; - } else if (ex instanceof InvalidArgumentException) { + } else if (ex instanceof InvalidArgumentException || ex instanceof IllegalArgumentException) { String message = ex.getMessage(); if (Strings.isBlank(message)) { return ErrorMessage.OPERATE_ERROR; diff --git a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/ExecCommandServiceImpl.java b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/ExecCommandServiceImpl.java index f4e1ad37..02474051 100644 --- a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/ExecCommandServiceImpl.java +++ b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/ExecCommandServiceImpl.java @@ -126,7 +126,7 @@ public class ExecCommandServiceImpl implements ExecCommandService { .sourceId(request.getSourceId()) .execSeq(request.getExecSeq()) .description(Strings.ifBlank(request.getDescription(), () -> { - if (command.length() < DESC_OMIT + 3) { + if (command.length() < DESC_OMIT + Const.OMIT.length()) { return command; } else { return command.substring(0, DESC_OMIT) + Const.OMIT; diff --git a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/ExecLogServiceImpl.java b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/ExecLogServiceImpl.java index 36998bd0..0f0503d6 100644 --- a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/ExecLogServiceImpl.java +++ b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/service/impl/ExecLogServiceImpl.java @@ -422,7 +422,7 @@ public class ExecLogServiceImpl implements ExecLogService { log.error("ExecLogService.downloadLogFile error id: {}", id, e); Streams.close(in); String errorMessage = ErrorMessage.FILE_READ_ERROR_CLEAR; - if (e instanceof InvalidArgumentException) { + if (e instanceof InvalidArgumentException || e instanceof IllegalArgumentException) { errorMessage = e.getMessage(); } // 响应错误信息 diff --git a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/utils/SftpUtils.java b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/utils/SftpUtils.java index b1c324ca..611a97d1 100644 --- a/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/utils/SftpUtils.java +++ b/orion-visor-module-asset/orion-visor-module-asset-service/src/main/java/com/orion/visor/module/asset/utils/SftpUtils.java @@ -1,8 +1,8 @@ package com.orion.visor.module.asset.utils; import com.alibaba.fastjson.JSON; -import com.jcraft.jsch.SftpException; import com.orion.lang.utils.Booleans; +import com.orion.lang.utils.Exceptions; import com.orion.lang.utils.Strings; import com.orion.lang.utils.io.Files1; import com.orion.net.host.sftp.SftpExecutor; @@ -41,13 +41,49 @@ public class SftpUtils { SftpFileBackupParams backupParams = new SftpFileBackupParams(file.getName(), System.currentTimeMillis()); String target = Strings.format(config.getBackupFileName(), JSON.parseObject(JSON.toJSONString(backupParams))); // 移动 - try { - executor.getChannel().rename(path, Files1.getPath(Files1.normalize(Files1.getPath(path + "/../" + target)))); - } catch (SftpException ignored) { - } // FIXME kit + move(executor, path, target); // executor.move(path, target); } } + /** + * 移动文件 + * FIXME kit DELETE + * + * @param executor executor + * @param source source + * @param target target + */ + public static void move(SftpExecutor executor, String source, String target) { + try { + source = Files1.getPath(source); + target = Files1.getPath(target); + if (target.charAt(0) == '/') { + // 检查是否需要创建目标文件目录 + if (!isSameParentPath(source, target)) { + executor.makeDirectories(Files1.getParentPath(target)); + } + // 绝对路径 + executor.getChannel().rename(source, Files1.getPath(Files1.normalize(target))); + } else { + // 相对路径 + executor.getChannel().rename(source, Files1.getPath(Files1.normalize(Files1.getPath(source + "/../" + target)))); + } + } catch (Exception e) { + throw Exceptions.sftp(e); + } + } + + /** + * FIXME kit DELETE + * + * @param source source + * @param target target + * @return res + */ + private static boolean isSameParentPath(String source, String target) { + return Files1.getParentPath(source).equals(Files1.getParentPath(target)); + } + }