diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/transfer/enums/TransferOperatorType.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/transfer/enums/TransferOperatorType.java index f35bd4c8..b4813367 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/transfer/enums/TransferOperatorType.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/transfer/enums/TransferOperatorType.java @@ -4,7 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; /** - * 消息操作类型 + * 传输操作类型 * * @author Jiahang Li * @version 1.0.0 @@ -14,20 +14,20 @@ import lombok.Getter; @AllArgsConstructor public enum TransferOperatorType { - /** - * 处理完成 - */ - PROCESSED("processed"), - /** * 开始上传 */ - UPLOAD_START("upload_start"), + UPLOAD_START("uploadStart"), /** * 上传完成 */ - UPLOAD_FINISH("upload_finish"), + UPLOAD_FINISH("uploadFinish"), + + /** + * 上传失败 + */ + UPLOAD_ERROR("uploadError"), ; diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/transfer/enums/TransferReceiverType.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/transfer/enums/TransferReceiverType.java new file mode 100644 index 00000000..95902ca4 --- /dev/null +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/transfer/enums/TransferReceiverType.java @@ -0,0 +1,43 @@ +package com.orion.ops.module.asset.handler.host.transfer.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 传输响应类型 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2024/2/21 22:03 + */ +@Getter +@AllArgsConstructor +public enum TransferReceiverType { + + /** + * 请求下一块上传数据 + */ + NEXT_BLOCK("nextBlock"), + + /** + * 请求下一个传输任务 + */ + NEXT_TRANSFER("nextTransfer"), + + ; + + private final String type; + + public static TransferReceiverType of(String type) { + if (type == null) { + return null; + } + for (TransferReceiverType value : values()) { + if (value.type.equals(type)) { + return value; + } + } + return null; + } + +} diff --git a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/transfer/handler/TransferHandler.java b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/transfer/handler/TransferHandler.java index a642e05b..b2ab0874 100644 --- a/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/transfer/handler/TransferHandler.java +++ b/orion-ops-module-asset/orion-ops-module-asset-service/src/main/java/com/orion/ops/module/asset/handler/host/transfer/handler/TransferHandler.java @@ -4,12 +4,14 @@ import com.alibaba.fastjson.JSON; import com.orion.lang.exception.argument.InvalidArgumentException; import com.orion.lang.utils.io.Streams; import com.orion.net.host.SessionStore; +import com.orion.ops.framework.common.constant.Const; import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.constant.ExtraFieldConst; import com.orion.ops.framework.websocket.core.utils.WebSockets; import com.orion.ops.module.asset.entity.dto.HostTerminalConnectDTO; import com.orion.ops.module.asset.enums.HostConnectTypeEnum; import com.orion.ops.module.asset.handler.host.transfer.enums.TransferOperatorType; +import com.orion.ops.module.asset.handler.host.transfer.enums.TransferReceiverType; import com.orion.ops.module.asset.handler.host.transfer.model.TransferOperatorRequest; import com.orion.ops.module.asset.handler.host.transfer.model.TransferOperatorResponse; import com.orion.ops.module.asset.handler.host.transfer.session.ITransferHostSession; @@ -72,6 +74,10 @@ public class TransferHandler implements ITransferHandler { // 上传完成 this.uploadFinish(); break; + case UPLOAD_ERROR: + // 上传失败 + this.uploadError(); + break; default: break; } @@ -79,23 +85,18 @@ public class TransferHandler implements ITransferHandler { @Override public void putContent(byte[] content) { - Exception ex = null; try { // 写入内容 currentSession.putContent(content); + // 响应结果 + this.sendMessage(TransferReceiverType.NEXT_BLOCK, null); } catch (IOException e) { - ex = e; log.error("TransferHandler.putContent error", e); // 写入完成 currentSession.putFinish(); + // 响应结果 + this.sendMessage(TransferReceiverType.NEXT_TRANSFER, e); } - // 响应结果 - TransferOperatorResponse resp = TransferOperatorResponse.builder() - .type(TransferOperatorType.PROCESSED.getType()) - .success(ex == null) - .msg(this.getErrorMessage(ex)) - .build(); - WebSockets.sendText(this.channel, JSON.toJSONString(resp)); } /** @@ -104,20 +105,18 @@ public class TransferHandler implements ITransferHandler { * @param payload payload */ private void uploadStart(TransferOperatorRequest payload) { - Exception ex = null; try { + // 开始上传 currentSession.startUpload(payload.getPath()); + // 响应结果 + this.sendMessage(TransferReceiverType.NEXT_BLOCK, null); } catch (Exception e) { - ex = e; log.error("TransferHandler.uploadStart error", e); + // 传输完成 + currentSession.putFinish(); + // 响应结果 + this.sendMessage(TransferReceiverType.NEXT_TRANSFER, e); } - // 响应结果 - TransferOperatorResponse resp = TransferOperatorResponse.builder() - .type(TransferOperatorType.PROCESSED.getType()) - .success(ex == null) - .msg(this.getErrorMessage(ex)) - .build(); - WebSockets.sendText(this.channel, JSON.toJSONString(resp)); } /** @@ -126,11 +125,16 @@ public class TransferHandler implements ITransferHandler { private void uploadFinish() { currentSession.putFinish(); // 响应结果 - TransferOperatorResponse resp = TransferOperatorResponse.builder() - .type(TransferOperatorType.PROCESSED.getType()) - .success(true) - .build(); - WebSockets.sendText(this.channel, JSON.toJSONString(resp)); + this.sendMessage(TransferReceiverType.NEXT_TRANSFER, null); + } + + /** + * 上传失败 + */ + private void uploadError() { + currentSession.putFinish(); + // 响应结果 + this.sendMessage(TransferReceiverType.NEXT_TRANSFER, new InvalidArgumentException(Const.EMPTY)); } /** @@ -158,16 +162,26 @@ public class TransferHandler implements ITransferHandler { } catch (Exception e) { log.error("TransferHandler.getAndInitSession error", e); // 响应结果 - TransferOperatorResponse resp = TransferOperatorResponse.builder() - .type(TransferOperatorType.PROCESSED.getType()) - .success(false) - .msg(this.getErrorMessage(e)) - .build(); - WebSockets.sendText(this.channel, JSON.toJSONString(resp)); + this.sendMessage(TransferReceiverType.NEXT_TRANSFER, e); return false; } } + /** + * 发送消息 + * + * @param type type + * @param ex ex + */ + private void sendMessage(TransferReceiverType type, Exception ex) { + TransferOperatorResponse resp = TransferOperatorResponse.builder() + .type(type.getType()) + .success(ex == null) + .msg(this.getErrorMessage(ex)) + .build(); + WebSockets.sendText(this.channel, JSON.toJSONString(resp)); + } + /** * 获取错误信息 * diff --git a/orion-ops-ui/src/views/host/terminal/components/sftp/sftp-upload-modal.vue b/orion-ops-ui/src/views/host/terminal/components/sftp/sftp-upload-modal.vue index f82e324c..569a87a7 100644 --- a/orion-ops-ui/src/views/host/terminal/components/sftp/sftp-upload-modal.vue +++ b/orion-ops-ui/src/views/host/terminal/components/sftp/sftp-upload-modal.vue @@ -11,8 +11,11 @@ :on-before-ok="handlerOk" @cancel="handleClose">