package controllers import ( "encoding/json" "io" "strings" "server/models" beego "github.com/beego/beego/v2/server/web" ) type StorageConfigController struct { beego.Controller } type storageConfigPayload struct { StorageType string `json:"storage_type"` QiniuAccessKey *string `json:"qiniu_access_key"` QiniuSecretKey *string `json:"qiniu_secret_key"` QiniuBucket *string `json:"qiniu_bucket"` QiniuDomain *string `json:"qiniu_domain"` QiniuRegion *string `json:"qiniu_region"` } func normalizeStorageType(v string) string { switch strings.TrimSpace(v) { case "local", "qiniu": return strings.TrimSpace(v) default: return "local" } } // GetStorageConfig 获取存储配置 // GET /platform/storageConfig func (c *StorageConfigController) GetStorageConfig() { cfg, err := models.GetStorageConfig() if err != nil { c.Data["json"] = map[string]interface{}{"code": 500, "msg": "获取配置失败"} _ = c.ServeJSON() return } c.Data["json"] = map[string]interface{}{ "code": 200, "msg": "success", "data": map[string]interface{}{ "storage_type": cfg.StorageType, "qiniu_access_key": cfg.QiniuAccessKey, "qiniu_secret_key": cfg.QiniuSecretKey, "qiniu_bucket": cfg.QiniuBucket, "qiniu_domain": cfg.QiniuDomain, "qiniu_region": cfg.QiniuRegion, }, } _ = c.ServeJSON() } // SaveStorageConfig 保存存储配置 // POST /platform/saveStorageConfig func (c *StorageConfigController) SaveStorageConfig() { var p storageConfigPayload raw, _ := io.ReadAll(c.Ctx.Request.Body) if err := json.Unmarshal(raw, &p); err != nil { c.Data["json"] = map[string]interface{}{"code": 400, "msg": "参数错误"} _ = c.ServeJSON() return } storageType := normalizeStorageType(p.StorageType) // 如果选择七牛云,验证必填字段 if storageType == "qiniu" { if p.QiniuAccessKey == nil || strings.TrimSpace(*p.QiniuAccessKey) == "" { c.Data["json"] = map[string]interface{}{"code": 400, "msg": "七牛云 AccessKey 不能为空"} _ = c.ServeJSON() return } if p.QiniuSecretKey == nil || strings.TrimSpace(*p.QiniuSecretKey) == "" { c.Data["json"] = map[string]interface{}{"code": 400, "msg": "七牛云 SecretKey 不能为空"} _ = c.ServeJSON() return } if p.QiniuBucket == nil || strings.TrimSpace(*p.QiniuBucket) == "" { c.Data["json"] = map[string]interface{}{"code": 400, "msg": "七牛云 Bucket 不能为空"} _ = c.ServeJSON() return } if p.QiniuDomain == nil || strings.TrimSpace(*p.QiniuDomain) == "" { c.Data["json"] = map[string]interface{}{"code": 400, "msg": "七牛云域名不能为空"} _ = c.ServeJSON() return } } var existed models.StorageConfig err := models.Orm.QueryTable(new(models.StorageConfig)).OrderBy("-id").One(&existed) if err == nil { // 更新现有配置 update := map[string]interface{}{ "storage_type": storageType, "qiniu_access_key": p.QiniuAccessKey, "qiniu_secret_key": p.QiniuSecretKey, "qiniu_bucket": p.QiniuBucket, "qiniu_domain": p.QiniuDomain, "qiniu_region": p.QiniuRegion, } _, err = models.Orm.QueryTable(new(models.StorageConfig)).Filter("id", existed.ID).Update(update) if err != nil { c.Data["json"] = map[string]interface{}{"code": 500, "msg": "保存失败"} _ = c.ServeJSON() return } } else { // 创建新配置 row := &models.StorageConfig{ StorageType: storageType, QiniuAccessKey: getStringValue(p.QiniuAccessKey), QiniuSecretKey: getStringValue(p.QiniuSecretKey), QiniuBucket: getStringValue(p.QiniuBucket), QiniuDomain: getStringValue(p.QiniuDomain), QiniuRegion: getStringValue(p.QiniuRegion), } if _, err := models.Orm.Insert(row); err != nil { c.Data["json"] = map[string]interface{}{"code": 500, "msg": "保存失败"} _ = c.ServeJSON() return } } c.Data["json"] = map[string]interface{}{"code": 200, "msg": "保存成功"} _ = c.ServeJSON() } func getStringValue(s *string) string { if s == nil { return "" } return *s }