🐛 修复 windows 文件备份失败.

This commit is contained in:
lijiahangmax
2024-07-14 21:24:53 +08:00
parent 849e010bc3
commit c20c83245f
12 changed files with 68 additions and 20 deletions

View File

@@ -29,10 +29,11 @@ public class SftpRemoveHandler extends AbstractTerminalHandler<SftpBaseRequest>
@Override
public void handle(WebSocketSession channel, SftpBaseRequest payload) {
long startTime = System.currentTimeMillis();
// 获取会话
String path = payload.getPath();
String sessionId = payload.getSessionId();
// 获取会话
ISftpSession session = hostTerminalManager.getSession(channel.getId(), sessionId);
String[] paths = payload.getPath().split("\\|");
String[] paths = path.split("\\|");
log.info("SftpRemoveHandler-handle start sessionId: {}, path: {}", sessionId, Arrays.toString(paths));
Exception ex = null;
// 删除
@@ -53,7 +54,7 @@ public class SftpRemoveHandler extends AbstractTerminalHandler<SftpBaseRequest>
.build());
// 保存操作日志
Map<String, Object> extra = Maps.newMap();
extra.put(OperatorLogs.PATH, payload.getPath());
extra.put(OperatorLogs.PATH, path);
this.saveOperatorLog(payload, channel,
extra, HostTerminalOperatorType.SFTP_REMOVE,
startTime, ex);

View File

@@ -2,6 +2,7 @@ package com.orion.visor.module.asset.handler.host.transfer.utils;
import com.alibaba.fastjson.JSON;
import com.orion.lang.exception.argument.InvalidArgumentException;
import com.orion.lang.utils.Strings;
import com.orion.visor.framework.common.constant.ErrorMessage;
import com.orion.visor.framework.websocket.core.utils.WebSockets;
import com.orion.visor.module.asset.handler.host.transfer.enums.TransferReceiverType;
@@ -64,7 +65,11 @@ public class TransferUtils {
if (ex == null) {
return null;
} else if (ex instanceof InvalidArgumentException) {
return ex.getMessage();
String message = ex.getMessage();
if (Strings.isBlank(message)) {
return ErrorMessage.OPERATE_ERROR;
}
return message;
} else if (ex instanceof ClientAbortException) {
return ErrorMessage.CLIENT_ABORT;
}

View File

@@ -60,7 +60,10 @@ public class HostSftpServiceImpl implements HostSftpService {
vo.setHostId(extra.getLong(ExtraFieldConst.HOST_ID));
vo.setHostName(extra.getString(ExtraFieldConst.HOST_NAME));
vo.setHostAddress(extra.getString(ExtraFieldConst.ADDRESS));
vo.setPaths(extra.getString(ExtraFieldConst.PATH).split("\\|"));
String[] paths = Optional.ofNullable(extra.getString(ExtraFieldConst.PATH))
.map(p -> p.split("\\|"))
.orElse(new String[0]);
vo.setPaths(paths);
vo.setExtra(extra);
return vo;
});

View File

@@ -1,8 +1,10 @@
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.Strings;
import com.orion.lang.utils.io.Files1;
import com.orion.net.host.sftp.SftpExecutor;
import com.orion.net.host.sftp.SftpFile;
import com.orion.visor.module.asset.define.config.AppSftpConfig;
@@ -39,7 +41,12 @@ public class SftpUtils {
SftpFileBackupParams backupParams = new SftpFileBackupParams(file.getName(), System.currentTimeMillis());
String target = Strings.format(config.getBackupFileName(), JSON.parseObject(JSON.toJSONString(backupParams)));
// 移动
executor.move(path, target);
try {
executor.getChannel().rename(path, Files1.getPath(Files1.normalize(Files1.getPath(path + "/../" + target))));
} catch (SftpException ignored) {
}
// FIXME kit
// executor.move(path, target);
}
}