diff --git a/backend/utils/cloud_storage/client/sftp.go b/backend/utils/cloud_storage/client/sftp.go index d41cec2a8..243c4f6d5 100644 --- a/backend/utils/cloud_storage/client/sftp.go +++ b/backend/utils/cloud_storage/client/sftp.go @@ -108,7 +108,7 @@ func (s sftpClient) Download(src, target string) (bool, error) { } defer dstFile.Close() - if _, err = srcFile.WriteTo(dstFile); err != nil { + if _, err = io.Copy(srcFile, dstFile); err != nil { return false, err } return true, err diff --git a/backend/utils/cloud_storage/client/webdav.go b/backend/utils/cloud_storage/client/webdav.go index 966fdc870..66d6ccfec 100644 --- a/backend/utils/cloud_storage/client/webdav.go +++ b/backend/utils/cloud_storage/client/webdav.go @@ -1,9 +1,12 @@ package client import ( + "crypto/tls" "fmt" "io" + "net/http" "os" + "strings" "github.com/studio-b12/gowebdav" ) @@ -25,6 +28,14 @@ func NewWebDAVClient(vars map[string]interface{}) (*webDAVClient, error) { url = address } client := gowebdav.NewClient(url, username, password) + tlsConfig := &tls.Config{} + if strings.HasPrefix(address, "https") { + tlsConfig.InsecureSkipVerify = true + } + var transport http.RoundTripper = &http.Transport{ + TLSClientConfig: tlsConfig, + } + client.SetTransport(transport) if err := client.Connect(); err != nil { return nil, err } @@ -33,22 +44,13 @@ func NewWebDAVClient(vars map[string]interface{}) (*webDAVClient, error) { func (s webDAVClient) Upload(src, target string) (bool, error) { targetFilePath := s.Bucket + "/" + target - fileInfo, err := os.Stat(src) + srcFile, err := os.Open(src) if err != nil { return false, err } - // 50M - if fileInfo.Size() > 52428800 { - bytes, _ := os.ReadFile(src) - if err := s.client.Write(targetFilePath, bytes, 0644); err != nil { - return false, err - } - return true, nil - } - file, _ := os.Open(src) - defer file.Close() + defer srcFile.Close() - if err := s.client.WriteStream(targetFilePath, file, 0644); err != nil { + if err := s.client.WriteStream(targetFilePath, srcFile, 0644); err != nil { return false, err } return true, nil @@ -76,16 +78,8 @@ func (s webDAVClient) Download(src, target string) (bool, error) { return false, err } defer file.Close() - // 50M - if info.Size() > 52428800 { - reader, _ := s.client.ReadStream(srcPath) - if _, err := io.Copy(file, reader); err != nil { - return false, err - } - } - - bytes, _ := s.client.Read(srcPath) - if err := os.WriteFile(target, bytes, 0644); err != nil { + reader, _ := s.client.ReadStream(srcPath) + if _, err := io.Copy(file, reader); err != nil { return false, err } return true, err diff --git a/frontend/src/views/cronjob/backup/index.vue b/frontend/src/views/cronjob/backup/index.vue index 3886d3a3e..d4ad274b6 100644 --- a/frontend/src/views/cronjob/backup/index.vue +++ b/frontend/src/views/cronjob/backup/index.vue @@ -107,9 +107,15 @@ const onDownload = async (row: Backup.RecordInfo) => { fileDir: row.fileDir, fileName: row.fileName, }; - await downloadBackupRecord(params).then(async (res) => { - downloadFile(res.data); - }); + loading.value = true; + await downloadBackupRecord(params) + .then(async (res) => { + loading.value = false; + downloadFile(res.data); + }) + .catch(() => { + loading.value = false; + }); }; const buttons = [