6.3 KiB
6.3 KiB
存储配置功能说明
功能概述
系统支持两种文件存储方式:
- 本地存储:文件存储在服务器本地磁盘
- 七牛云存储:文件存储在七牛云对象存储服务
数据库变更
新增表
表名: 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
后端实现
新增文件
-
模型文件:
go/models/storage_config.go- 定义
StorageConfig模型 - 提供
GetStorageConfig()方法获取配置
- 定义
-
控制器文件:
go/controllers/storage_config.goGetStorageConfig: 获取存储配置SaveStorageConfig: 保存存储配置
-
路由注册:
go/routers/platform/platform.gobeego.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"
}
前端实现
新增文件
-
API文件:
platform/src/api/sitesettings.js- 新增
getStorageConfig()方法 - 新增
saveStorageConfig()方法
- 新增
-
组件文件:
platform/src/views/system/platformsettings/components/storageSettings.vue- 存储配置表单组件
- 支持本地存储和七牛云存储切换
- 表单验证和数据持久化
-
页面更新:
platform/src/views/system/platformsettings/index.vue- 新增"存储配置"标签页
使用说明
- 登录平台管理后台
- 进入"系统设置" -> "平台设置"
- 切换到"存储配置"标签页
- 选择存储类型:
- 本地存储:无需额外配置
- 七牛云存储:需要填写以下信息
七牛云配置步骤
-
注册七牛云账号
- 访问 https://www.qiniu.com/
- 注册并完成实名认证
-
创建存储空间
- 登录七牛云控制台
- 进入"对象存储" -> "空间管理"
- 点击"新建空间"
- 填写空间名称(Bucket)
- 选择存储区域
- 设置访问控制(建议选择"公开")
-
获取密钥
- 进入"个人中心" -> "密钥管理"
- 查看或创建 AccessKey 和 SecretKey
-
配置CDN域名
- 在存储空间详情页,进入"域名管理"
- 添加自定义域名或使用测试域名
- 完成域名备案和CNAME解析
- 获取CDN加速域名
-
填写配置信息
- 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
}
注意事项
-
安全性
- SecretKey 在数据库中明文存储,建议后续加密处理
- 生产环境建议使用环境变量或密钥管理服务
-
成本
- 七牛云存储和流量会产生费用
- 建议设置合理的存储策略和CDN缓存规则
-
迁移
- 切换存储方式时,已有文件不会自动迁移
- 需要手动迁移或保持双存储支持
-
备份
- 重要文件建议定期备份
- 七牛云支持跨区域备份功能
测试清单
- 数据库表创建成功
- 后端API接口正常
- 前端页面显示正常
- 本地存储配置保存成功
- 七牛云配置保存成功
- 表单验证正常工作
- 配置切换功能正常
- 数据持久化正常