diff --git a/backend/init/migration/migrations/v_1_9.go b/backend/init/migration/migrations/v_1_9.go index 5a767039e..65e46ecdd 100644 --- a/backend/init/migration/migrations/v_1_9.go +++ b/backend/init/migration/migrations/v_1_9.go @@ -272,16 +272,16 @@ var UpdateCronjobSpec = &gormigrate.Migration{ jobs []model.Cronjob backupAccounts []model.BackupAccount ) - mapAccount := make(map[uint]string) + mapAccount := make(map[uint]model.BackupAccount) if err := tx.Find(&jobs).Error; err != nil { return err } _ = tx.Find(&backupAccounts).Error for _, item := range backupAccounts { - mapAccount[item.ID] = item.Type + mapAccount[item.ID] = item } for _, job := range jobs { - if job.KeepLocal && mapAccount[uint(job.TargetDirID)] != constant.Local { + if job.KeepLocal && mapAccount[uint(job.TargetDirID)].Type != constant.Local { if err := tx.Model(&model.Cronjob{}). Where("id = ?", job.ID). Updates(map[string]interface{}{ @@ -316,6 +316,7 @@ var UpdateCronjobSpec = &gormigrate.Migration{ CronjobID: job.ID, Type: "snapshot", Name: job.Name, + FileDir: "system_snapshot", FileName: snap.Name + ".tar.gz", Source: snap.From, BackupType: snap.From, @@ -324,16 +325,22 @@ var UpdateCronjobSpec = &gormigrate.Migration{ } continue } + itemPath := mapAccount[uint(job.TargetDirID)].BackupPath + if itemPath != "/" { + itemPath = strings.TrimPrefix(itemPath, "/") + "/" + } else { + itemPath = "" + } if job.Type == "log" { item := model.BackupRecord{ From: "cronjob", CronjobID: job.ID, Type: "log", Name: job.Name, - FileDir: path.Dir(record.File), + FileDir: path.Dir(strings.TrimPrefix(record.File, itemPath)), FileName: path.Base(record.File), - Source: mapAccount[uint(job.TargetDirID)], - BackupType: mapAccount[uint(job.TargetDirID)], + Source: mapAccount[uint(job.TargetDirID)].Type, + BackupType: mapAccount[uint(job.TargetDirID)].Type, } _ = tx.Create(&item).Error continue @@ -344,14 +351,14 @@ var UpdateCronjobSpec = &gormigrate.Migration{ CronjobID: job.ID, Type: "directory", Name: job.Name, - FileDir: path.Dir(record.File), + FileDir: path.Dir(strings.TrimPrefix(record.File, itemPath)), FileName: path.Base(record.File), - BackupType: mapAccount[uint(job.TargetDirID)], + BackupType: mapAccount[uint(job.TargetDirID)].Type, } if record.FromLocal { item.Source = constant.Local } else { - item.Source = mapAccount[uint(job.TargetDirID)] + item.Source = mapAccount[uint(job.TargetDirID)].Type } _ = tx.Create(&item).Error continue diff --git a/backend/utils/cloud_storage/client/sftp.go b/backend/utils/cloud_storage/client/sftp.go index 243c4f6d5..a05b29243 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 = io.Copy(srcFile, dstFile); err != nil { + if _, err = io.Copy(dstFile, srcFile); err != nil { return false, err } return true, err