diff --git a/app/admin/apis/devops/explorer_sftp.go b/app/admin/apis/devops/explorer_sftp.go index a6f60ca15a0794cfa4426dfabf7c3d4106d450a4..b0a3702e9bb2e4a1759028366764721341e8056f 100644 --- a/app/admin/apis/devops/explorer_sftp.go +++ b/app/admin/apis/devops/explorer_sftp.go @@ -9,7 +9,6 @@ import ( "github.com/MarchGe/go-admin-server/app/common/R" ginUtils "github.com/MarchGe/go-admin-server/app/common/utils/gin_utils" "github.com/gin-gonic/gin" - "io" "net/http" "os" "path" @@ -161,14 +160,10 @@ func (a *ExplorerSftpApi) Download(c *gin.Context) { fileName := parts[len(parts)-1] c.Writer.Header().Add("Content-Type", "application/octet-stream") c.Writer.Header().Set("Content-Disposition", "attachment; filename="+fileName) - file, err := a.explorerSftpService.DownloadFile(filePath, host) + err = a.explorerSftpService.DownloadFile(filePath, host, c.Writer) if err != nil { E.PanicErr(err) } - defer func() { _ = file.Close() }() - if _, err = io.Copy(c.Writer, file); err != nil { - E.PanicErr(err) - } c.Writer.Flush() } diff --git a/app/admin/service/dvservice/explorer_sftp.go b/app/admin/service/dvservice/explorer_sftp.go index b006ab8d52a9eac12d621952a60f247dfa8f91af..4a39d671e3838107c8f28559e09664660f62d89c 100644 --- a/app/admin/service/dvservice/explorer_sftp.go +++ b/app/admin/service/dvservice/explorer_sftp.go @@ -125,26 +125,28 @@ func (s *ExplorerSftpService) UploadFile(filePath string, file multipart.File, h return err } -func (s *ExplorerSftpService) DownloadFile(filePath string, host *dvmodel.Host) (*sftp.File, error) { +func (s *ExplorerSftpService) DownloadFile(filePath string, host *dvmodel.Host, w io.Writer) error { client, err := s.getSftpClient(host) if err != nil { - return nil, fmt.Errorf("get sftp client error, %w", err) + return fmt.Errorf("get sftp client error, %w", err) } - defer func() { _ = client.Close() }() + defer client.Close() info, err := client.Stat(filePath) if err != nil { - return nil, E.Message("获取文件信息失败") + return E.Message("获取文件信息失败") } if info.IsDir() { - return nil, E.Message("不支持下载文件夹") + return E.Message("不支持下载文件夹") } file, err := client.Open(filePath) if err != nil { - return nil, fmt.Errorf("sftp open file error, %w", err) + return fmt.Errorf("sftp open file error, %w", err) } - return file, nil + defer file.Close() + _, err = io.Copy(w, file) + return err } func (s *ExplorerSftpService) CreateDir(r *req.SftpCreateDirReq, host *dvmodel.Host) error {