From 1b6b65c693601c7e94fde0462b637b8a2596f1a8 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 24 Jul 2024 10:23:43 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20sftp=E7=9B=AE=E5=BD=95=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E6=96=9C=E6=9D=A0=E8=BD=AC=E4=B9=89=E5=AF=BC=E8=87=B4=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E8=AF=86=E5=88=AB=E4=B8=8D=E6=AD=A3=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/ssh/sftp.go | 57 +++++++++------------------------ 1 file changed, 16 insertions(+), 41 deletions(-) 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 }