go-platform/docs/storage-config-guide.md
2026-04-09 16:26:38 +08:00

6.3 KiB
Raw Blame History

存储配置功能说明

功能概述

系统支持两种文件存储方式:

  1. 本地存储:文件存储在服务器本地磁盘
  2. 七牛云存储:文件存储在七牛云对象存储服务

数据库变更

新增表

表名: yz_system_storage_config

字段说明:

字段名 类型 说明
id bigint(20) 主键ID
storage_type varchar(20) 存储类型: local/qiniu
qiniu_access_key varchar(255) 七牛云AccessKey
qiniu_secret_key varchar(255) 七牛云SecretKey
qiniu_bucket varchar(128) 七牛云Bucket名称
qiniu_domain varchar(255) 七牛云CDN域名
qiniu_region varchar(50) 七牛云存储区域
create_time datetime 创建时间
update_time datetime 更新时间

执行迁移

# 在MySQL中执行迁移脚本
mysql -u your_user -p your_database < go/migrations/add_storage_config_table.sql

后端实现

新增文件

  1. 模型文件: go/models/storage_config.go

    • 定义 StorageConfig 模型
    • 提供 GetStorageConfig() 方法获取配置
  2. 控制器文件: go/controllers/storage_config.go

    • GetStorageConfig: 获取存储配置
    • SaveStorageConfig: 保存存储配置
  3. 路由注册: go/routers/platform/platform.go

    beego.Router("/platform/storageConfig", &controllers.StorageConfigController{}, "get:GetStorageConfig")
    beego.Router("/platform/saveStorageConfig", &controllers.StorageConfigController{}, "post:SaveStorageConfig")
    

API接口

获取存储配置

GET /platform/storageConfig

响应示例:

{
  "code": 200,
  "msg": "success",
  "data": {
    "storage_type": "qiniu",
    "qiniu_access_key": "your_access_key",
    "qiniu_secret_key": "your_secret_key",
    "qiniu_bucket": "your_bucket",
    "qiniu_domain": "https://cdn.example.com",
    "qiniu_region": "z0"
  }
}

保存存储配置

POST /platform/saveStorageConfig

请求体:

{
  "storage_type": "qiniu",
  "qiniu_access_key": "your_access_key",
  "qiniu_secret_key": "your_secret_key",
  "qiniu_bucket": "your_bucket",
  "qiniu_domain": "https://cdn.example.com",
  "qiniu_region": "z0"
}

前端实现

新增文件

  1. API文件: platform/src/api/sitesettings.js

    • 新增 getStorageConfig() 方法
    • 新增 saveStorageConfig() 方法
  2. 组件文件: platform/src/views/system/platformsettings/components/storageSettings.vue

    • 存储配置表单组件
    • 支持本地存储和七牛云存储切换
    • 表单验证和数据持久化
  3. 页面更新: platform/src/views/system/platformsettings/index.vue

    • 新增"存储配置"标签页

使用说明

  1. 登录平台管理后台
  2. 进入"系统设置" -> "平台设置"
  3. 切换到"存储配置"标签页
  4. 选择存储类型:
    • 本地存储:无需额外配置
    • 七牛云存储:需要填写以下信息

七牛云配置步骤

  1. 注册七牛云账号

  2. 创建存储空间

    • 登录七牛云控制台
    • 进入"对象存储" -> "空间管理"
    • 点击"新建空间"
    • 填写空间名称Bucket
    • 选择存储区域
    • 设置访问控制(建议选择"公开"
  3. 获取密钥

    • 进入"个人中心" -> "密钥管理"
    • 查看或创建 AccessKey 和 SecretKey
  4. 配置CDN域名

    • 在存储空间详情页,进入"域名管理"
    • 添加自定义域名或使用测试域名
    • 完成域名备案和CNAME解析
    • 获取CDN加速域名
  5. 填写配置信息

    • AccessKey: 从密钥管理获取
    • SecretKey: 从密钥管理获取
    • Bucket: 存储空间名称
    • CDN域名: 完整的域名地址(如 https://cdn.example.com
    • 存储区域: 选择创建空间时的区域

存储区域对照表

区域名称 区域代码
华东-浙江 z0
华北-河北 z1
华南-广东 z2
北美-洛杉矶 na0
亚太-新加坡 as0
华东-浙江2 cn-east-2

后续开发建议

文件上传服务改造

需要修改文件上传相关的代码,根据 storage_type 选择不同的存储方式:

// 示例代码
func UploadFile(file *multipart.FileHeader) (string, error) {
    cfg, _ := models.GetStorageConfig()
    
    switch cfg.StorageType {
    case "qiniu":
        return uploadToQiniu(file, cfg)
    case "local":
        return uploadToLocal(file)
    default:
        return uploadToLocal(file)
    }
}

七牛云SDK集成

需要安装七牛云Go SDK

go get github.com/qiniu/go-sdk/v7

示例上传代码:

import (
    "github.com/qiniu/go-sdk/v7/auth/qbox"
    "github.com/qiniu/go-sdk/v7/storage"
)

func uploadToQiniu(file *multipart.FileHeader, cfg *models.StorageConfig) (string, error) {
    mac := qbox.NewMac(cfg.QiniuAccessKey, cfg.QiniuSecretKey)
    putPolicy := storage.PutPolicy{
        Scope: cfg.QiniuBucket,
    }
    upToken := putPolicy.UploadToken(mac)
    
    // 配置上传参数
    cfg := storage.Config{
        Zone:          &storage.ZoneHuadong, // 根据 cfg.QiniuRegion 选择
        UseHTTPS:      true,
        UseCdnDomains: false,
    }
    
    formUploader := storage.NewFormUploader(&cfg)
    ret := storage.PutRet{}
    
    // 执行上传
    err := formUploader.PutFile(context.Background(), &ret, upToken, key, localFile, nil)
    if err != nil {
        return "", err
    }
    
    // 返回完整URL
    return cfg.QiniuDomain + "/" + ret.Key, nil
}

注意事项

  1. 安全性

    • SecretKey 在数据库中明文存储,建议后续加密处理
    • 生产环境建议使用环境变量或密钥管理服务
  2. 成本

    • 七牛云存储和流量会产生费用
    • 建议设置合理的存储策略和CDN缓存规则
  3. 迁移

    • 切换存储方式时,已有文件不会自动迁移
    • 需要手动迁移或保持双存储支持
  4. 备份

    • 重要文件建议定期备份
    • 七牛云支持跨区域备份功能

测试清单

  • 数据库表创建成功
  • 后端API接口正常
  • 前端页面显示正常
  • 本地存储配置保存成功
  • 七牛云配置保存成功
  • 表单验证正常工作
  • 配置切换功能正常
  • 数据持久化正常