✨ sftp 文件操作实现.
This commit is contained in:
@@ -1,6 +1,10 @@
|
|||||||
package com.orion.ops.module.asset.handler.host.terminal.handler;
|
package com.orion.ops.module.asset.handler.host.terminal.handler;
|
||||||
|
|
||||||
|
import com.orion.ops.framework.common.enums.BooleanBit;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.enums.OutputTypeEnum;
|
||||||
import com.orion.ops.module.asset.handler.host.terminal.model.request.SftpChangeModRequest;
|
import com.orion.ops.module.asset.handler.host.terminal.model.request.SftpChangeModRequest;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.session.ISftpSession;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.socket.WebSocketSession;
|
import org.springframework.web.socket.WebSocketSession;
|
||||||
@@ -18,6 +22,27 @@ public class SftpChangeModHandler extends AbstractTerminalHandler<SftpChangeModR
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(WebSocketSession channel, SftpChangeModRequest payload) {
|
public void handle(WebSocketSession channel, SftpChangeModRequest payload) {
|
||||||
|
// 获取会话
|
||||||
|
ISftpSession session = terminalManager.getSession(channel.getId(), payload.getSessionId());
|
||||||
|
String path = payload.getPath();
|
||||||
|
Integer mod = payload.getMod();
|
||||||
|
log.info("SftpChangeModHandler-handle session: {}, path: {}, mod: {}", payload.getSessionId(), path, mod);
|
||||||
|
Exception ex = null;
|
||||||
|
// 修改权限
|
||||||
|
try {
|
||||||
|
session.chmod(path, mod);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("SftpChangeModHandler-handle error", e);
|
||||||
|
ex = e;
|
||||||
|
}
|
||||||
|
// 返回
|
||||||
|
this.send(channel,
|
||||||
|
OutputTypeEnum.SFTP_CHMOD,
|
||||||
|
SftpBaseResponse.builder()
|
||||||
|
.sessionId(payload.getSessionId())
|
||||||
|
.result(BooleanBit.of(ex == null).getValue())
|
||||||
|
.msg(ex == null ? null : ex.getMessage())
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
package com.orion.ops.module.asset.handler.host.terminal.handler;
|
package com.orion.ops.module.asset.handler.host.terminal.handler;
|
||||||
|
|
||||||
|
import com.orion.ops.framework.common.enums.BooleanBit;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.enums.OutputTypeEnum;
|
||||||
import com.orion.ops.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
import com.orion.ops.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.model.response.SftpGetContentResponse;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.session.ISftpSession;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.socket.WebSocketSession;
|
import org.springframework.web.socket.WebSocketSession;
|
||||||
@@ -18,6 +22,28 @@ public class SftpGetContentHandler extends AbstractTerminalHandler<SftpBaseReque
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(WebSocketSession channel, SftpBaseRequest payload) {
|
public void handle(WebSocketSession channel, SftpBaseRequest payload) {
|
||||||
|
// 获取会话
|
||||||
|
ISftpSession session = terminalManager.getSession(channel.getId(), payload.getSessionId());
|
||||||
|
String path = payload.getPath();
|
||||||
|
log.info("SftpGetContentHandler-handle session: {}, path: {}", payload.getSessionId(), path);
|
||||||
|
String content = null;
|
||||||
|
Exception ex = null;
|
||||||
|
// 获取内容
|
||||||
|
try {
|
||||||
|
content = session.getContent(path);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("SftpGetContentHandler-handle error", e);
|
||||||
|
ex = e;
|
||||||
|
}
|
||||||
|
// 返回
|
||||||
|
this.send(channel,
|
||||||
|
OutputTypeEnum.SFTP_GET_CONTENT,
|
||||||
|
SftpGetContentResponse.builder()
|
||||||
|
.sessionId(payload.getSessionId())
|
||||||
|
.result(BooleanBit.of(ex == null).getValue())
|
||||||
|
.content(content)
|
||||||
|
.msg(ex == null ? null : ex.getMessage())
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ public class SftpMakeDirectoryHandler extends AbstractTerminalHandler<SftpBaseRe
|
|||||||
String path = payload.getPath();
|
String path = payload.getPath();
|
||||||
log.info("SftpMakeDirectoryHandler-handle session: {}, path: {}", payload.getSessionId(), path);
|
log.info("SftpMakeDirectoryHandler-handle session: {}, path: {}", payload.getSessionId(), path);
|
||||||
Exception ex = null;
|
Exception ex = null;
|
||||||
|
// 创建文件夹
|
||||||
try {
|
try {
|
||||||
session.mkdir(path);
|
session.mkdir(path);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
package com.orion.ops.module.asset.handler.host.terminal.handler;
|
package com.orion.ops.module.asset.handler.host.terminal.handler;
|
||||||
|
|
||||||
|
import com.orion.ops.framework.common.enums.BooleanBit;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.enums.OutputTypeEnum;
|
||||||
import com.orion.ops.module.asset.handler.host.terminal.model.request.SftpMoveRequest;
|
import com.orion.ops.module.asset.handler.host.terminal.model.request.SftpMoveRequest;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.session.ISftpSession;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.socket.WebSocketSession;
|
import org.springframework.web.socket.WebSocketSession;
|
||||||
@@ -18,6 +22,27 @@ public class SftpMoveHandler extends AbstractTerminalHandler<SftpMoveRequest> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(WebSocketSession channel, SftpMoveRequest payload) {
|
public void handle(WebSocketSession channel, SftpMoveRequest payload) {
|
||||||
|
// 获取会话
|
||||||
|
ISftpSession session = terminalManager.getSession(channel.getId(), payload.getSessionId());
|
||||||
|
String path = payload.getPath();
|
||||||
|
String target = payload.getTarget();
|
||||||
|
log.info("SftpMoveHandler-handle session: {}, path: {}, target: {}", payload.getSessionId(), path, target);
|
||||||
|
Exception ex = null;
|
||||||
|
// 移动
|
||||||
|
try {
|
||||||
|
session.move(path, target);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("SftpMoveHandler-handle error", e);
|
||||||
|
ex = e;
|
||||||
|
}
|
||||||
|
// 返回
|
||||||
|
this.send(channel,
|
||||||
|
OutputTypeEnum.SFTP_MOVE,
|
||||||
|
SftpBaseResponse.builder()
|
||||||
|
.sessionId(payload.getSessionId())
|
||||||
|
.result(BooleanBit.of(ex == null).getValue())
|
||||||
|
.msg(ex == null ? null : ex.getMessage())
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
package com.orion.ops.module.asset.handler.host.terminal.handler;
|
package com.orion.ops.module.asset.handler.host.terminal.handler;
|
||||||
|
|
||||||
|
import com.orion.ops.framework.common.enums.BooleanBit;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.enums.OutputTypeEnum;
|
||||||
import com.orion.ops.module.asset.handler.host.terminal.model.request.SftpRemoveRequest;
|
import com.orion.ops.module.asset.handler.host.terminal.model.request.SftpRemoveRequest;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.session.ISftpSession;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.socket.WebSocketSession;
|
import org.springframework.web.socket.WebSocketSession;
|
||||||
@@ -18,6 +22,26 @@ public class SftpRemoveHandler extends AbstractTerminalHandler<SftpRemoveRequest
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(WebSocketSession channel, SftpRemoveRequest payload) {
|
public void handle(WebSocketSession channel, SftpRemoveRequest payload) {
|
||||||
|
// 获取会话
|
||||||
|
ISftpSession session = terminalManager.getSession(channel.getId(), payload.getSessionId());
|
||||||
|
String[] paths = payload.getPaths().split("\\|");
|
||||||
|
log.info("SftpRemoveHandler-handle session: {}, paths: {}", payload.getSessionId(), paths);
|
||||||
|
Exception ex = null;
|
||||||
|
// 删除
|
||||||
|
try {
|
||||||
|
session.remove(paths);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("SftpRemoveHandler-handle error", e);
|
||||||
|
ex = e;
|
||||||
|
}
|
||||||
|
// 返回
|
||||||
|
this.send(channel,
|
||||||
|
OutputTypeEnum.SFTP_REMOVE,
|
||||||
|
SftpBaseResponse.builder()
|
||||||
|
.sessionId(payload.getSessionId())
|
||||||
|
.result(BooleanBit.of(ex == null).getValue())
|
||||||
|
.msg(ex == null ? null : ex.getMessage())
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
package com.orion.ops.module.asset.handler.host.terminal.handler;
|
package com.orion.ops.module.asset.handler.host.terminal.handler;
|
||||||
|
|
||||||
|
import com.orion.ops.framework.common.enums.BooleanBit;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.enums.OutputTypeEnum;
|
||||||
import com.orion.ops.module.asset.handler.host.terminal.model.request.SftpSetContentRequest;
|
import com.orion.ops.module.asset.handler.host.terminal.model.request.SftpSetContentRequest;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.session.ISftpSession;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.socket.WebSocketSession;
|
import org.springframework.web.socket.WebSocketSession;
|
||||||
@@ -18,6 +22,26 @@ public class SftpSetContentHandler extends AbstractTerminalHandler<SftpSetConten
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(WebSocketSession channel, SftpSetContentRequest payload) {
|
public void handle(WebSocketSession channel, SftpSetContentRequest payload) {
|
||||||
|
// 获取会话
|
||||||
|
ISftpSession session = terminalManager.getSession(channel.getId(), payload.getSessionId());
|
||||||
|
String path = payload.getPath();
|
||||||
|
log.info("SftpSetContentHandler-handle session: {}, path: {}", payload.getSessionId(), path);
|
||||||
|
Exception ex = null;
|
||||||
|
// 修改权限
|
||||||
|
try {
|
||||||
|
session.setContent(path, payload.getContent());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("SftpSetContentHandler-handle error", e);
|
||||||
|
ex = e;
|
||||||
|
}
|
||||||
|
// 返回
|
||||||
|
this.send(channel,
|
||||||
|
OutputTypeEnum.SFTP_SET_CONTENT,
|
||||||
|
SftpBaseResponse.builder()
|
||||||
|
.sessionId(payload.getSessionId())
|
||||||
|
.result(BooleanBit.of(ex == null).getValue())
|
||||||
|
.msg(ex == null ? null : ex.getMessage())
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ public class SftpTouchHandler extends AbstractTerminalHandler<SftpBaseRequest> {
|
|||||||
String path = payload.getPath();
|
String path = payload.getPath();
|
||||||
log.info("SftpTouchHandler-handle session: {}, path: {}", payload.getSessionId(), path);
|
log.info("SftpTouchHandler-handle session: {}, path: {}", payload.getSessionId(), path);
|
||||||
Exception ex = null;
|
Exception ex = null;
|
||||||
|
// 创建文件
|
||||||
try {
|
try {
|
||||||
session.touch(path);
|
session.touch(path);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
package com.orion.ops.module.asset.handler.host.terminal.handler;
|
package com.orion.ops.module.asset.handler.host.terminal.handler;
|
||||||
|
|
||||||
|
import com.orion.ops.framework.common.enums.BooleanBit;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.enums.OutputTypeEnum;
|
||||||
import com.orion.ops.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
import com.orion.ops.module.asset.handler.host.terminal.model.request.SftpBaseRequest;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.model.response.SftpBaseResponse;
|
||||||
|
import com.orion.ops.module.asset.handler.host.terminal.session.ISftpSession;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.socket.WebSocketSession;
|
import org.springframework.web.socket.WebSocketSession;
|
||||||
@@ -18,6 +22,26 @@ public class SftpTruncateHandler extends AbstractTerminalHandler<SftpBaseRequest
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(WebSocketSession channel, SftpBaseRequest payload) {
|
public void handle(WebSocketSession channel, SftpBaseRequest payload) {
|
||||||
|
// 获取会话
|
||||||
|
ISftpSession session = terminalManager.getSession(channel.getId(), payload.getSessionId());
|
||||||
|
String path = payload.getPath();
|
||||||
|
log.info("SftpTruncateHandler-handle session: {}, path: {}", payload.getSessionId(), path);
|
||||||
|
Exception ex = null;
|
||||||
|
// 截断文件
|
||||||
|
try {
|
||||||
|
session.truncate(path);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("SftpTruncateHandler-handle error", e);
|
||||||
|
ex = e;
|
||||||
|
}
|
||||||
|
// 返回
|
||||||
|
this.send(channel,
|
||||||
|
OutputTypeEnum.SFTP_TRUNCATE,
|
||||||
|
SftpBaseResponse.builder()
|
||||||
|
.sessionId(payload.getSessionId())
|
||||||
|
.result(BooleanBit.of(ex == null).getValue())
|
||||||
|
.msg(ex == null ? null : ex.getMessage())
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,6 @@ import java.util.List;
|
|||||||
public class SftpRemoveRequest extends SftpBaseRequest {
|
public class SftpRemoveRequest extends SftpBaseRequest {
|
||||||
|
|
||||||
@Schema(description = "paths 多个用|分割")
|
@Schema(description = "paths 多个用|分割")
|
||||||
private List<String> paths;
|
private String paths;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public interface ISftpSession extends ITerminalSession {
|
|||||||
*
|
*
|
||||||
* @param paths paths
|
* @param paths paths
|
||||||
*/
|
*/
|
||||||
void remove(List<String> paths);
|
void remove(String[] paths);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 截断文件
|
* 截断文件
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.springframework.web.socket.WebSocketSession;
|
import org.springframework.web.socket.WebSocketSession;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -89,8 +90,8 @@ public class SftpSession extends TerminalSession implements ISftpSession {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void remove(List<String> paths) {
|
public void remove(String[] paths) {
|
||||||
paths.stream()
|
Arrays.stream(paths)
|
||||||
.map(Valid::checkNormalize)
|
.map(Valid::checkNormalize)
|
||||||
.forEach(executor::remove);
|
.forEach(executor::remove);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user