From ef5a13f87f67ed8a2757e6183512b93030d843e3 Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Thu, 18 Apr 2024 10:36:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E5=A4=87=E4=BB=BD=E8=B4=A6=E5=8F=B7=E8=B7=AF=E5=BE=84=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98=20(#4560?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/service/cronjob_helper.go | 16 ++++++++++++++++ backend/utils/common/common.go | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/backend/app/service/cronjob_helper.go b/backend/app/service/cronjob_helper.go index f2cc61945..65a60578a 100644 --- a/backend/app/service/cronjob_helper.go +++ b/backend/app/service/cronjob_helper.go @@ -2,6 +2,7 @@ package service import ( "context" + "encoding/json" "fmt" "os" "path" @@ -275,6 +276,21 @@ func loadClientMap(backupAccounts string) (map[string]cronjobUploadHelper, error if account.BackupPath != "/" { pathItem = strings.TrimPrefix(account.BackupPath, "/") } + if target == constant.Local { + varMap := make(map[string]interface{}) + if err := json.Unmarshal([]byte(account.Vars), &varMap); err != nil { + return nil, err + } + if _, ok := varMap["dir"]; !ok { + return nil, errors.New("load local backup dir failed") + } + baseDir, ok := varMap["dir"].(string) + if ok { + pathItem = baseDir + } else { + return nil, fmt.Errorf("error type dir: %T", varMap["dir"]) + } + } clients[target] = cronjobUploadHelper{ client: client, backupPath: pathItem, diff --git a/backend/utils/common/common.go b/backend/utils/common/common.go index ecffb38b9..97dd4459b 100644 --- a/backend/utils/common/common.go +++ b/backend/utils/common/common.go @@ -123,6 +123,11 @@ func CopyFile(src, dst string) error { if path.Base(src) != path.Base(dst) { dst = path.Join(dst, path.Base(src)) } + if _, err := os.Stat(path.Dir(dst)); err != nil { + if os.IsNotExist(err) { + _ = os.MkdirAll(path.Dir(dst), os.ModePerm) + } + } target, err := os.OpenFile(dst+"_temp", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) if err != nil { return err