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

5.2 KiB
Raw Permalink Blame History

存储配置功能 - 完整实现

已完成的所有工作

本项目已完整实现文件存储的配置、上传和迁移功能,支持本地存储和七牛云存储。

快速开始

1. 安装依赖

cd go
go mod download
go mod tidy

或使用脚本:

  • Linux/Mac: ./scripts/install_dependencies.sh
  • Windows: scripts\install_dependencies.bat

2. 执行数据库迁移

mysql -u root -p your_database < migrations/add_storage_config_table.sql

3. 重启服务

bee run

4. 配置存储

访问:平台管理后台 → 系统设置 → 平台设置 → 存储配置

核心功能

1. 存储服务抽象层

文件: services/storage_service.go

  • 统一的存储接口 StorageService
  • 本地存储实现 LocalStorage
  • 七牛云存储实现 QiniuStorage
  • 自动选择存储服务 GetStorageService()
  • 支持所有七牛云存储区域

2. 文件上传改造

文件: controllers/platform_file.go

  • 自动根据配置选择存储方式
  • MD5去重检查
  • 失败自动回滚
  • 完整的错误处理

3. 文件迁移功能

文件: services/storage_migration.go

  • 从本地迁移到七牛云
  • 并发迁移5个并发
  • 实时进度跟踪
  • 错误收集和报告

4. 存储配置管理

后端:

  • models/storage_config.go - 数据模型
  • controllers/storage_config.go - API控制器

前端:

  • platform/src/views/system/platformsettings/components/storageSettings.vue - 配置界面

5. API接口

存储配置:

  • GET /platform/storageConfig - 获取配置
  • POST /platform/saveStorageConfig - 保存配置

文件上传:

  • POST /platform/uploadfile - 上传文件(自动选择存储)

文件迁移:

  • POST /platform/storage/migrateToQiniu - 迁移到七牛云
  • GET /platform/storage/migrationProgress - 查询进度

技术实现

存储服务架构

┌─────────────────────────────────────┐
│   File Upload Controller            │
│   (platform_file.go)                │
└──────────────┬──────────────────────┘
               │
               ▼
┌─────────────────────────────────────┐
│   Storage Service Interface         │
│   (storage_service.go)              │
└──────────┬──────────────────────────┘
           │
    ┌──────┴──────┐
    │             │
    ▼             ▼
┌─────────┐  ┌──────────┐
│ Local   │  │ Qiniu    │
│ Storage │  │ Storage  │
└─────────┘  └──────────┘

七牛云配置

存储区域

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

配置步骤

  1. 注册七牛云账号
  2. 创建存储空间Bucket
  3. 获取 AccessKey 和 SecretKey
  4. 配置 CDN 域名
  5. 在系统中填写配置

文件清单

后端核心文件

go/
├── models/
│   ├── storage_config.go          # 存储配置模型
│   └── init.go                    # 模型注册(已修改)
├── controllers/
│   ├── storage_config.go          # 存储配置控制器
│   ├── storage_migration.go       # 迁移控制器
│   └── platform_file.go           # 文件上传(已改造)
├── services/
│   ├── storage_service.go         # 存储服务(核心)
│   └── storage_migration.go       # 迁移服务
├── routers/
│   └── platform/platform.go       # 路由注册(已修改)
├── migrations/
│   └── add_storage_config_table.sql  # 数据库迁移
├── scripts/
│   ├── install_dependencies.sh    # 依赖安装Linux/Mac
│   └── install_dependencies.bat   # 依赖安装Windows
└── go.mod                         # 依赖管理已添加七牛云SDK

使用示例

配置本地存储

{
  storage_type: "local"
}

配置七牛云存储

{
  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"
}

上传文件

// 后端自动选择存储
storageService, _ := services.GetStorageService()
result, _ := storageService.Upload(file, header)
// result.URL 是完整的访问URL

迁移文件

// 迁移到七牛云
progress, err := services.MigrateLocalToQiniu(tenantID)
fmt.Printf("成功: %d, 失败: %d\n", progress.Success, progress.Failed)

更多文档

  • 详细使用指南:docs/storage-config-guide.md
  • 部署检查清单:docs/DEPLOYMENT_CHECKLIST.md
  • 快速开始:docs/QUICK_START.md
  • 实现报告:docs/IMPLEMENTATION_COMPLETE.md

所有功能已完整实现并测试通过! 🎉