diff --git a/handlers/settings.go b/handlers/settings.go index 955024c..aa1cb86 100644 --- a/handlers/settings.go +++ b/handlers/settings.go @@ -78,10 +78,38 @@ func RunCloudBackup(c *gin.Context) { // 清理本地旧备份,保留最近5份 config.CleanOldBackups(5) + if err := cleanOldRemoteBackups(client, 5); err != nil { + log.Printf("云端旧备份清理失败: %v", err) + } c.JSON(http.StatusOK, Response{Success: true, Message: "备份成功: " + remoteName}) } +// cleanOldRemoteBackups 清理 WebDAV 上的旧备份,仅保留最近 keep 份。 +func cleanOldRemoteBackups(client *config.WebDAVClient, keep int) error { + if keep < 1 { + keep = 1 + } + files, err := client.List() + if err != nil { + return err + } + if len(files) <= keep { + return nil + } + var firstErr error + for _, file := range files[keep:] { + if err := client.Delete(file.Name); err != nil { + if firstErr == nil { + firstErr = fmt.Errorf("删除 %s: %w", file.Name, err) + } + continue + } + log.Printf("已清理云端旧备份: %s", file.Name) + } + return firstErr +} + // ListCloudBackups 列出云端备份 func ListCloudBackups(c *gin.Context) { client, err := getWebDAVClient() @@ -217,5 +245,8 @@ func doAutoBackup() { } config.CleanOldBackups(5) + if err := cleanOldRemoteBackups(client, 5); err != nil { + log.Printf("云端旧备份清理失败: %v", err) + } log.Printf("自动备份成功: %s", remoteName) }