# 七牛云上传功能文档索引

## 快速开始

如果你想快速测试七牛云上传功能，请按以下顺序阅读：

1. **[七牛云上传测试步骤](./七牛云上传测试步骤.md)** ⭐ 推荐先看
   - 测试前的准备工作
   - 详细的测试步骤
   - 常见问题排查

2. **[七牛云区域配置修复说明](./七牛云区域配置修复说明.md)**
   - 了解最近修复的区域配置问题
   - 查看修复的具体内容

3. **[七牛云直传配置](./七牛云直传配置.md)**
   - 完整的技术文档
   - API 接口说明
   - 代码使用示例

4. **[七牛云区域配置流程图](./七牛云区域配置流程图.md)**
   - 可视化流程图
   - 帮助理解上传机制

## 文档说明

### 七牛云上传测试步骤.md
**适合人群**: 测试人员、开发人员

**内容**:
- 测试前的准备工作
- 详细的测试步骤
- 验证方法
- 常见问题排查
- 性能测试指南

**何时阅读**: 准备测试上传功能时

---

### 七牛云区域配置修复说明.md
**适合人群**: 开发人员、运维人员

**内容**:
- 问题描述和原因分析
- 解决方案详解
- 修复的文件列表
- 验证步骤
- 区域切换方法

**何时阅读**: 遇到区域配置问题或想了解修复细节时

---

### 七牛云直传配置.md
**适合人群**: 开发人员

**内容**:
- 上传流程对比（旧 vs 新）
- 安装依赖
- 后端 API 文档
- 前端使用示例
- 工作原理
- 安全性说明
- 性能优化
- 故障排查
- 迁移指南

**何时阅读**: 需要了解完整技术实现或集成到其他页面时

---

### 七牛云区域配置流程图.md
**适合人群**: 所有人

**内容**:
- 问题和解决方案的可视化对比
- 完整上传流程图
- 区域映射关系图
- 代码对比
- 优势对比

**何时阅读**: 想快速理解上传机制时

---

## 最近更新 (2026-04-09)

### ✅ 已完成
- 修复了七牛云区域配置问题
- 添加了 `getQiniuRegion()` 函数
- 实现了动态区域配置
- 创建了完整的测试文档

### 🔧 修复的问题
**问题**: 上传时出现 "incorrect region" 错误

**原因**: 前端硬编码区域为 z0（华东），但数据库配置为 z2（华南）

**解决**: 前端动态从后端获取区域配置，自动使用正确的区域

### 📝 涉及的文件
- `platform/src/utils/qiniuUpload.js` - 添加区域映射函数
- `go/controllers/qiniu_upload.go` - 返回区域配置
- `platform/docs/*.md` - 创建文档

---

## 技术架构

```
┌─────────────────────────────────────────────────────────┐
│                    七牛云直传架构                         │
└─────────────────────────────────────────────────────────┘

前端 (Vue3)
├── platform/src/utils/qiniuUpload.js
│   ├── smartUpload()        - 智能选择上传方式
│   ├── uploadToQiniu()      - 七牛云直传
│   ├── uploadToLocal()      - 本地上传（中转）
│   ├── getStorageConfig()   - 获取存储配置
│   ├── getQiniuToken()      - 获取上传凭证
│   ├── saveFileRecord()     - 保存文件记录
│   ├── batchUpload()        - 批量上传
│   └── getQiniuRegion()     - 区域映射 ⭐ 新增
│
└── platform/src/views/platform/softwareupgrade/components/edit.vue
    └── 使用 smartUpload() 上传文件

后端 (Go + Beego)
├── go/controllers/qiniu_upload.go
│   ├── GetStorageConfig()   - 获取存储配置
│   ├── GetUploadToken()     - 生成上传凭证
│   ├── SaveFileRecord()     - 保存文件记录
│   └── getQiniuUploadURL()  - 获取上传地址
│
├── go/routers/platform/platform.go
│   ├── GET  /platform/storage/config
│   ├── GET  /platform/qiniu/token
│   └── POST /platform/qiniu/save
│
└── go/models/storage_config.go
    └── GetStorageConfig()   - 从数据库读取配置

数据库 (MySQL)
├── system_storage_config    - 存储配置表
│   ├── storage_type         - 存储类型 (local/qiniu)
│   ├── qiniu_region         - 七牛云区域 (z0/z1/z2/...)
│   ├── qiniu_bucket         - 存储空间名称
│   ├── qiniu_domain         - 访问域名
│   ├── qiniu_access_key     - AccessKey
│   └── qiniu_secret_key     - SecretKey
│
└── system_file              - 文件记录表
    ├── id                   - 文件 ID
    ├── name                 - 文件名
    ├── src                  - 文件 URL
    ├── size                 - 文件大小
    ├── md5                  - 文件 MD5
    └── ...

七牛云 (Qiniu Cloud)
└── 存储空间: yunzerwebsite
    ├── 区域: z2 (华南)
    ├── 域名: http://7colud.yunzer.cn
    └── 上传地址: https://up-z2.qiniup.com
```

---

## 上传流程

### 简化流程
```
1. 用户选择文件
   ↓
2. 前端获取存储配置 (storageType: 'qiniu')
   ↓
3. 前端获取上传凭证 (token, region: 'z2')
   ↓
4. 前端直接上传到七牛云 (up-z2.qiniup.com)
   ↓
5. 前端保存文件记录到数据库
   ↓
6. 显示上传成功
```

### 详细流程
参见 [七牛云区域配置流程图.md](./七牛云区域配置流程图.md)

---

## 支持的区域

| 区域代码 | 区域名称 | 上传地址 | 状态 |
|---------|---------|---------|------|
| z0 | 华东 | up-z0.qiniup.com | ✓ 支持 |
| z1 | 华北 | up-z1.qiniup.com | ✓ 支持 |
| z2 | 华南 | up-z2.qiniup.com | ✓ 支持 (当前) |
| na0 | 北美 | up-na0.qiniup.com | ✓ 支持 |
| as0 | 新加坡 | up-as0.qiniup.com | ✓ 支持 |
| cn-east-2 | 华东-浙江2 | up-cn-east-2.qiniup.com | ✓ 支持 |

---

## 常见问题

### Q1: 如何测试上传功能？
**A**: 参见 [七牛云上传测试步骤.md](./七牛云上传测试步骤.md)

### Q2: 上传时出现 "incorrect region" 错误？
**A**: 已修复。参见 [七牛云区域配置修复说明.md](./七牛云区域配置修复说明.md)

### Q3: 如何切换到其他区域？
**A**: 修改数据库配置即可，无需改代码：
```sql
UPDATE system_storage_config 
SET qiniu_region = 'z1'  -- 切换到华北
WHERE id = 1;
```

### Q4: 如何在其他页面使用上传功能？
**A**: 参见 [七牛云直传配置.md](./七牛云直传配置.md) 的"前端使用"章节

### Q5: 大文件上传会超时吗？
**A**: 不会。七牛云 SDK 支持：
- 自动分片上传
- 断点续传
- 并发上传
- 前端已设置 `timeout: 0`（无超时限制）

### Q6: 上传是否经过服务器？
**A**: 不经过。前端直接上传到七牛云，服务器只负责：
- 生成上传凭证
- 保存文件记录到数据库

### Q7: 如何回滚到本地存储？
**A**: 修改数据库配置：
```sql
UPDATE system_storage_config 
SET storage_type = 'local' 
WHERE id = 1;
```
前端会自动切换到本地上传方式。

---

## 性能对比

### 旧方案（服务器中转）
```
100MB 文件上传时间：
- 上传到服务器：2 分钟
- 服务器上传到七牛云：2 分钟
- 总计：4 分钟
```

### 新方案（直传）
```
100MB 文件上传时间：
- 直接上传到七牛云：2 分钟
- 总计：2 分钟
```

**效率提升**: 50%

---

## 依赖

### 前端
- `qiniu-js@^3.4.4` - 七牛云 JavaScript SDK

### 后端
- `github.com/qiniu/go-sdk/v7@v7.18.2` - 七牛云 Go SDK

---

## 相关链接

- [七牛云官方文档](https://developer.qiniu.com/)
- [七牛云存储区域](https://developer.qiniu.com/kodo/1671/region-endpoint-fq)
- [qiniu-js SDK 文档](https://developer.qiniu.com/kodo/1283/javascript)

---

## 联系方式

如有问题，请联系开发团队。

---

## 更新日期

2026-04-09
