first commit
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user