diff --git a/src/framework/utils/ssh/sftp.go b/src/framework/utils/ssh/sftp.go index b08fdb22..2fd826fc 100644 --- a/src/framework/utils/ssh/sftp.go +++ b/src/framework/utils/ssh/sftp.go @@ -23,6 +23,13 @@ func (s *SSHClientSFTP) Close() { // CopyDirRemoteToLocal 复制目录-远程到本地 func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error { + // 创建本地目录 + err := os.MkdirAll(localDir, 0775) + if err != nil { + logger.Errorf("CopyDirRemoteToLocal failed to creating local directory %s: => %s", localDir, err.Error()) + return err + } + // 列出远程目录中的文件和子目录 remoteFiles, err := s.Client.ReadDir(remoteDir) if err != nil { @@ -30,13 +37,6 @@ func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error { return err } - // 创建本地目录 - err = os.MkdirAll(localDir, 0775) - if err != nil { - logger.Errorf("CopyDirRemoteToLocal failed to creating local directory %s: => %s", localDir, err.Error()) - return err - } - // 遍历远程文件和子目录并复制到本地 for _, remoteFile := range remoteFiles { remotePath := filepath.ToSlash(filepath.Join(remoteDir, remoteFile.Name())) @@ -62,49 +62,26 @@ func (s *SSHClientSFTP) CopyDirRemoteToLocal(remoteDir, localDir string) error { // CopyDirRemoteToLocal 复制目录-本地到远程 func (s *SSHClientSFTP) CopyDirLocalToRemote(localDir, remoteDir string) error { - // 创建远程目录 - err := s.Client.MkdirAll(remoteDir) - if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remoteDir, err.Error()) - return err - } - // 遍历本地目录中的文件和子目录并复制到远程 - err = filepath.Walk(localDir, func(localPath string, info os.FileInfo, err error) error { + err := filepath.Walk(localDir, func(localPath string, info os.FileInfo, err error) error { if err != nil { return err } // 生成远程路径 - remotePath := filepath.Join(remoteDir, localPath[len(localDir):]) + remotePath := filepath.ToSlash(filepath.Join(remoteDir, localPath[len(localDir):])) if info.IsDir() { // 如果是子目录,则创建远程目录 - err := s.Client.MkdirAll(remotePath) - if err != nil { + if err := s.Client.MkdirAll(remotePath); err != nil { logger.Errorf("CopyDirLocalToRemote failed to creating remote directory %s: => %s", remotePath, err.Error()) - return nil + return err } } else { // 如果是文件,则复制文件内容 - localFile, err := os.Open(localPath) - if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to opening local file %s: => %s", localPath, err.Error()) - return nil - } - defer localFile.Close() - - remoteFile, err := s.Client.Create(remotePath) - if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to creating remote file %s: => %s", remotePath, err.Error()) - return nil - } - defer remoteFile.Close() - - _, err = io.Copy(remoteFile, localFile) - if err != nil { - logger.Errorf("CopyDirLocalToRemote failed to copying file contents from %s to %s: => %s", localPath, remotePath, err.Error()) - return nil + if err := s.CopyFileLocalToRemote(localPath, remotePath); err != nil { + logger.Errorf("CopyFileLocalToRemote failed to opening local file %s: => %s", localPath, err.Error()) + return err } } @@ -140,8 +117,7 @@ func (s *SSHClientSFTP) CopyFileRemoteToLocal(remotePath, localPath string) erro defer localFile.Close() // 复制文件内容 - _, err = io.Copy(localFile, remoteFile) - if err != nil { + if _, err = io.Copy(localFile, remoteFile); err != nil { logger.Errorf("CopyFileRemoteToLocal failed to copying contents: => %s", err.Error()) return err } @@ -167,8 +143,7 @@ func (s *SSHClientSFTP) CopyFileLocalToRemote(localPath, remotePath string) erro defer remoteFile.Close() // 复制文件内容 - _, err = io.Copy(remoteFile, localFile) - if err != nil { + if _, err = io.Copy(remoteFile, localFile); err != nil { logger.Errorf("CopyFileLocalToRemote failed to copying contents: => %s", err.Error()) return err }