# 七牛云上传测试步骤

## 前置条件

1. 数据库配置已正确设置：
   - `storage_type = 'qiniu'`
   - `qiniu_region = 'z2'` (华南)
   - `qiniu_bucket = 'yunzerwebsite'`
   - `qiniu_domain = 'http://7colud.yunzer.cn'`
   - `qiniu_access_key` 和 `qiniu_secret_key` 已配置

2. 前端依赖已安装：
   - `qiniu-js@^3.4.4` ✓ (已在 package.json 中)

3. 后端服务已重启：
   ```bash
   systemctl restart go-api
   ```

## 测试步骤

### 1. 登录系统

访问前端页面并登录：
- URL: https://platform.yunzer.cn
- 账号: hero920103
- 密码: 920103

### 2. 进入软件升级页面

导航到：平台管理 → 软件升级

### 3. 上传文件测试

点击"新增"或"编辑"按钮，在弹出的对话框中：

1. 点击"上传软件包"按钮
2. 选择一个文件（建议先用小文件测试，如 1-10MB）
3. 观察上传进度条
4. 等待上传完成

### 4. 验证上传结果

#### 前端验证
- 检查是否显示上传成功消息
- 检查文件 URL 是否正确（应该是 `http://7colud.yunzer.cn/...`）
- 检查文件是否可以预览/下载

#### 后端日志验证
```bash
tail -f /www/wwwroot/api.yunzer.cn/go.log
```

查看日志中是否有：
- `GET /platform/storage/config` - 获取存储配置
- `GET /platform/qiniu/token` - 获取上传凭证
- `POST /platform/qiniu/save` - 保存文件记录

#### 七牛云控制台验证
1. 登录七牛云控制台
2. 进入 `yunzerwebsite` 存储空间
3. 检查文件是否已上传
4. 文件路径格式应为：`2026/04/09/时间戳.扩展名`

#### 数据库验证
```sql
SELECT id, name, src, size, type, cate, md5, create_time 
FROM system_file 
ORDER BY id DESC 
LIMIT 5;
```

检查：
- `src` 字段应该是完整的七牛云 URL
- `md5` 字段应该有值
- `size` 字段应该正确

## 预期结果

### 成功标志
1. 前端显示上传成功
2. 文件 URL 格式正确：`http://7colud.yunzer.cn/2026/04/09/xxxxx.ext`
3. 七牛云控制台能看到文件
4. 数据库有对应记录
5. 文件可以正常访问和下载

### 上传流程
```
前端 → 获取存储配置 (storageType: 'qiniu')
     → 获取上传凭证 (token, region: 'z2')
     → 直接上传到七牛云 (up-z2.qiniup.com)
     → 保存文件记录到数据库
     → 返回文件 URL
```

## 常见问题排查

### 问题 1: "incorrect region" 错误

**错误信息**: 
```
xhr request failed, code: 400
response: {"error":"incorrect region, please use up-z2.qiniup.com, bucket is: yunzerwebsite"}
```

**原因**: 前端使用的区域与七牛云 bucket 实际区域不匹配

**解决**: 
- 已修复：添加了 `getQiniuRegion()` 函数，根据后端返回的 region 动态设置
- 后端返回 `region: 'z2'`，前端会自动使用 `qiniu.region.z2`

### 问题 2: "获取上传凭证失败"

**可能原因**:
- 未登录或 token 过期
- 存储配置未设置为七牛云
- 七牛云配置不完整

**解决**:
1. 检查登录状态
2. 检查数据库 `system_storage_config` 表
3. 确认 AccessKey 和 SecretKey 正确

### 问题 3: 上传后文件无法访问

**可能原因**:
- 七牛云域名配置错误
- 域名未绑定或未备案
- 文件权限设置问题

**解决**:
1. 检查 `qiniu_domain` 配置
2. 登录七牛云控制台检查域名绑定
3. 检查存储空间访问权限（应为公开）

### 问题 4: 大文件上传失败

**可能原因**:
- 网络超时
- 浏览器限制

**解决**:
1. 七牛云 SDK 支持断点续传，会自动重试
2. 检查网络连接
3. 尝试分片上传（SDK 自动处理）

## 性能测试

### 小文件测试 (< 10MB)
- 预期时间：几秒内完成
- 不会分片上传

### 中等文件测试 (10MB - 100MB)
- 预期时间：根据网速，通常 1-2 分钟
- 可能会分片上传

### 大文件测试 (> 100MB)
- 预期时间：根据网速
- 会自动分片上传
- 支持断点续传

## 对比测试

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

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

**效率提升**: 50%

## 回滚方案

如果七牛云直传有问题，可以临时切换回本地存储：

```sql
UPDATE system_storage_config 
SET storage_type = 'local' 
WHERE id = 1;
```

前端会自动检测并使用本地上传方式（通过服务器中转）。

## 相关文件

- `platform/src/utils/qiniuUpload.js` - 上传工具（已添加 getQiniuRegion 函数）
- `go/controllers/qiniu_upload.go` - 后端控制器
- `platform/docs/七牛云直传配置.md` - 详细配置文档

## 更新日期

2026-04-09
