基于 Go-Zero + MySQL + Redis + RabbitMQ + Aliyun OSS / Volcengine TOS 的轻量级云盘系统
前端试用地址:https://www.xixiu.top
- 新增文件智能管家:前端新增独立入口“文件智能管家”,支持多轮对话、引用云盘文件、会话切换
- SSE 流式对话:聊天、工具调用、工具结果、审批中断均通过 SSE 实时推送
- 多工具 Agent:基于 Eino Agent 接入文件类工具,支持文件浏览、文档问答、图片分析、视频解释、创建文件夹、移动文件
- 多用户会话隔离:按
user_identity + session_id隔离会话与 checkpoint,避免串会话 - MySQL 持久化:新增 Agent 会话、消息、checkpoint 表,刷新页面后仍可恢复上下文与待审批状态
- 工具审批中断:操作型工具执行前先进入审批,前端可选择“继续执行”或“取消执行”
- Agent 工具统一收敛到
core/internal/agent/einoagent/tools/ - 修正根目录
.gitignore,避免将.cache/、web/dist/、web/node_modules/等本地产物提交到仓库
- 文件列表数量缓存:新增用户目录列表
count缓存,减少重复 COUNT 查询- 列表查询优先命中 Redis,未命中回源数据库并回写缓存
- 文件新增/变更后自动失效对应目录计数缓存,保证数据一致性
- 上传任务状态缓存(String):新增上传任务状态机缓存,状态值
0~40前端上传中1服务端处理中/压缩中2上传对象存储中3写入数据库中4上传成功- 任务状态 TTL 统一为 10 分钟,避免无效数据长期堆积
- 分片状态缓存(Hash):新增分片进度缓存,Key 设计为
upload:task:{md5}- field 为分片序号,value 为该分片状态
- 支持任务状态查询接口返回已上传分片信息,便于前端展示进度
- 新增上传任务状态查询接口:
POST /api/file/upload/status - 个人中心新增“上传任务状态”面板,轮询展示任务状态与分片上传进度
- 数据看板改为真实接口数据,不再提供模拟数据入口
- 上传/下载文件名一致性优化:任务名称与用户上传名称保持一致,下载优先使用文件展示名
- 直链复制能力增强:文件右键菜单支持复制图片与视频直链 URL
- 支持格式:图片(jpg/jpeg/png/gif/bmp/webp)与视频(mp4/avi/mov/mkv/flv/wmv/webm/m4v)
- 复制结果增加轻提示(toast),成功/失败反馈更直观
- 分享弹窗内不再额外请求视频直链,减少一次前端请求与接口耦合
- 修复文件列表重复显示问题(空
repository_identity关联导致重复 JOIN) - 修复 WEBP 图片压缩前解码失败问题
- 修复 MQ 重试流程中临时文件过早删除导致后续重试失败
- 修复分享下载直链接口调用方式,与后端
GET /api/share/download保持一致
- 新增对象存储统一抽象接口,支持 OSS / TOS 按环境变量切换
- 上传、下载预签名、删除、分片上传等流程已支持按
STORAGE_TYPE选择存储实现
- 布隆过滤器优化:集成布隆过滤器提升文件秒传性能
- O(1) 查询时间复杂度,毫秒级响应
- 内存占用减少 80%(相比数据库查询)
- 启动速度提升 10 倍(文件加载 vs 数据库查询)
- 自动持久化:定期保存到文件,支持快速重启恢复
- 默认 30 分钟自动保存间隔
- 支持环境变量配置保存频率
- 优雅关闭时强制保存数据
- 新增《布隆过滤器配置说明.md》
- 更新 README 添加布隆过滤器详细说明
- 完善性能数据和配置指南
- 异步文件上传:集成 RabbitMQ 消息队列,实现文件上传异步处理
- API 响应时间从 2-3 分钟降低到 < 1 秒
- 支持横向扩展 Worker 处理能力
- 完整的重试机制和失败处理
- 分片上传:大文件(>100MB)自动分片上传
- 10MB 分片 + 3 并发,充分利用带宽
- 每个分片独立重试,提升可靠性
- 500MB 文件上传速度 3-4 MB/s
- 修复文件名、扩展名、大小为空的问题
- 优化秒传逻辑的 SQL 查询(修复参数数量错误)
- 添加详细的上传日志(进度、速度、耗时)
- 完善错误处理和日志记录
- 新增《异步文件上传架构设计.md》
- 新增《OSS分片上传测试说明.md》
- 更新 README 添加性能数据和架构说明
玺云盘是一个功能完善的个人云存储系统,支持文件上传、管理、分享等核心功能。项目采用 Go-Zero 微服务框架,结合阿里云 OSS 对象存储,实现了高性能、可扩展的云盘服务。
- 🚀 异步文件上传:RabbitMQ 消息队列 + 后台 Worker,秒级响应,支持高并发
- 🤖 文件智能管家:基于 Eino Agent 的文件对话入口,支持流式回复、工具调用和审批中断
- ⚡ 智能压缩:视频自动压缩(ffmpeg H.264)、图片智能缩放(最大 1920x1080)
- 📦 分片上传:大文件(>100MB)自动分片上传,10MB 分片 + 3 并发,支持断点续传
- 🔄 秒传机制:基于 MD5 hash 的文件去重,相同文件无需重复上传
- 🌟 布隆过滤器优化:O(1) 查询时间复杂度,提升秒传性能 10 倍
- 📁 文件夹管理:多级目录结构、递归删除(CTE 优化)、批量操作
- 🔗 文件分享:支持链接分享、过期时间控制、资源保存
- 🔐 JWT 认证:自定义中间件,避免 Go-Zero 内置 JWT 的性能问题
- 🗄️ 双表架构:
repository_pool(全局文件池)+user_repository(用户关联),实现文件去重
| 技术 | 版本 | 说明 |
|---|---|---|
| Go | 1.20+ | 后端语言 |
| Go-Zero | v1.6.6 | 微服务框架 |
| MySQL | 8.0+ | 主数据库(支持 CTE 递归查询) |
| Redis | v9 | 缓存 + 验证码存储 |
| RabbitMQ | 3.x+ | 消息队列(异步文件处理) |
| Xorm | latest | ORM 框架 |
| Eino | v0.8.4 | Agent 编排与工具调用 |
| OpenAI Compatible API | - | Agent ChatModel / 多模态模型接入 |
| Aliyun OSS | SDK v2 | 对象存储 |
| FFmpeg | 4.0+ | 视频压缩 |
| Vue 3 + Vite | latest | 前端文件管理与智能管家 |
| golang.org/x/image | latest | 图片压缩 |
| bloom/v3 | v3.7.1 | 布隆过滤器(文件秒传优化) |
- Go 1.20+
- MySQL 8.0+
- Redis 5.0+
- RabbitMQ 3.x+(新增)
- FFmpeg 4.0+(可选,用于视频压缩)
# 克隆项目
git clone https://github.com/lonelymeko/xi_cloud_disk.git
cd xi_cloud_disk/core
# 安装 Go 依赖
go mod download
# 或手动安装核心依赖
go get xorm.io/xorm
go get github.com/jordan-wright/email
go get github.com/redis/go-redis/v9
go get github.com/satori/go.uuid
go get github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss
go get github.com/rabbitmq/amqp091-go
go get golang.org/x/image创建 .env 文件并配置:
# 阿里云 OSS 配置
OSS_ACCESS_KEY_ID=your_access_key
OSS_ACCESS_KEY_SECRET=your_secret_key
OSS_BUCKET_NAME=your_bucket
OSS_REGION=oss-cn-beijing
# MySQL 配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=cloud_disk
# Redis 配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
# RabbitMQ 配置(新增)
RABBITMQ_HOST=localhost
RABBITMQ_PORT=5672
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_VHOST=/
# 邮箱配置(用于验证码)
EMAIL_HOST=smtp.qq.com
EMAIL_PORT=587
EMAIL_USER=your_email@qq.com
EMAIL_PASSWORD=your_auth_code
# 是否启用邮箱验证码功能(生产环境不介意禁用,此项默认为true)
EMAIL_ENABLED=true
# 跨域配置
CORS_ALLOW_ORIGINS=http://localhost:5174,http://172.26.175.210:5174
# 布隆过滤器配置(可选)
# 定期保存间隔,默认30分钟
BLOOM_FILTER_SAVE_INTERVAL=30m
# Agent / ChatModel 配置(新增)
OPENAI_API_KEY=your_api_key
OPENAI_MODEL=your_chat_model
OPENAI_BASE_URL=https://your-openai-compatible-endpoint/v1
OPENAI_BY_AZURE=false-- 执行 SQL 脚本(位于 docs/database/ 目录)
source docs/database/schema.sql# 开发模式
go run core.go -f etc/core-api.yaml
# 编译运行
go build -o cloud_disk core.go
./cloud_disk -f etc/core-api.yaml服务启动后,访问 http://localhost:8888
# 使用 Homebrew 安装
brew install rabbitmq
# 启动 RabbitMQ 服务
brew services start rabbitmq
# 访问管理界面
open http://localhost:15672
# 默认账号密码:guest / guest# Ubuntu/Debian
sudo apt-get install rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
# CentOS/RHEL
sudo yum install rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
# 启用管理插件
sudo rabbitmq-plugins enable rabbitmq_managementdocker run -d --name rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=guest \
-e RABBITMQ_DEFAULT_PASS=guest \
rabbitmq:3-management# 在项目根目录运行测试
cd core
go test -v -run TestRabbitMQ ./test/
# 应该看到类似输出:
# ✅ 成功连接到 RabbitMQ
# ✅ 成功创建 Channel
# ✅ 成功声明队列: upload.process.queue
# ✅ 成功发布消息
# ✅ 成功消费消息cloud_disk/
├── core/ # 核心服务
│ ├── core.api # API 定义文件
│ ├── core.go # 主入口
│ ├── common/ # 公共组件
│ │ ├── response.go # 统一响应处理
│ │ └── define.go # 全局常量(分片上传配置等)
│ ├── global/ # 全局连接池
│ │ ├── DBEngine.go # MySQL 连接
│ │ └── rabbitmq_client.go # RabbitMQ 连接
│ ├── internal/
│ │ ├── config/ # 配置
│ │ ├── agent/ # Eino Agent Provider 与工具
│ │ │ └── einoagent/
│ │ │ ├── provider.go
│ │ │ └── tools/
│ │ ├── filter/ # 布隆过滤器
│ │ │ └── bloom_fliter.go # 布隆过滤器实现
│ │ ├── cache/ # Redis / 本地缓存封装
│ │ ├── handler/ # HTTP 处理器
│ │ ├── logic/ # 业务逻辑
│ │ ├── middleware/ # 中间件(JWT 认证)
│ │ ├── mq/ # 消息队列
│ │ │ └── consumer.go # RabbitMQ 消费者
│ │ ├── svc/ # 服务上下文
│ │ └── types/ # 请求/响应类型
│ ├── models/ # 数据模型(含 Agent session/message/checkpoint)
│ ├── utils/ # 工具函数
│ │ ├── email_send.go # 邮件发送
│ │ ├── jwt_enter.go # JWT 工具
│ │ ├── md5_encode.go # MD5 加密
│ │ ├── upload_to_oss.go # OSS 普通上传
│ │ └── upload_to_oss_multipart.go # OSS 分片上传
│ ├── test/ # 测试代码
│ │ └── rabbitmq_test.go # RabbitMQ 测试
│ └── docs/ # 文档
│ └── api/ # OpenAPI 文档
│ ├── user.yaml # 用户服务 API
│ ├── file.yaml # 文件服务 API
│ ├── share.yaml # 分享服务 API
│ └── README.md # API 文档说明
├── docs/ # 项目文档
│ ├── 布隆过滤器配置说明.md
│ ├── 异步文件上传架构设计.md
│ ├── OSS分片上传测试说明.md
│ ├── 数据库架构设计.md
│ ├── 文件夹下载方案.md
│ └── 代码审查-递归删除问题分析.md
├── test/ # 测试代码
├── web/ # 前端 UI(含“文件智能管家”页面)
├── go.mod
└── README.md
mindmap
root((I*CloudDisk))
用户模块
密码登录
邮箱注册
个人资料详情
存储池模块
中心存储池资源管理
文件存储
个人存储池资源管理
文件关联存储
文件夹层级管理
文件共享模块
文件分享
- ✅ 用户注册(邮箱验证码)
- ✅ 用户登录(JWT Token)
- ✅ 用户信息查询
- ✅ 自定义 JWT 中间件(避免 Go-Zero 内置 JWT 性能问题)
- ✅ 异步文件上传(RabbitMQ + 后台 Worker)
- ✅ 智能压缩(视频/图片自动压缩)
- ✅ 分片上传(大文件 >100MB 自动分片)
- ✅ 文件秒传(基于 MD5 hash 去重)
- ✅ 文件列表(分页 + 文件夹筛选)
- ✅ 文件重命名
- ✅ 文件移动
- ✅ 文件/文件夹删除(CTE 递归优化)
- ✅ 创建文件夹(多级目录)
- ✅ 递归删除文件夹(使用 CTE 递归查询,性能提升 95%)
- ✅ 移动文件夹
- ⏳ 文件夹下载(异步打包)- 详见
docs/文件夹下载方案.md
- ✅ 创建分享链接(支持过期时间)
- ✅ 获取分享详情(公开访问)
- ✅ 保存分享资源到个人网盘
- ✅ 基于 Eino Agent 的多轮对话
- ✅ SSE 流式输出 assistant 内容、tool call、tool result、approval_required
- ✅ 在聊天框引用用户文件,不直接暴露裸 OSS URL
- ✅ 会话列表、历史消息恢复、待审批状态恢复
- ✅ 多工具协同:文档、图片、视频、目录操作
前端 文件智能管家
↓
SSE /api/file/chat/stream
↓
Go-Zero Handler / Logic
↓
ServiceContext.AgentProvider
↓
Eino DeepAgent + ChatModel + Tool Middleware
↓
文件工具 / 审批中断 / Checkpoint Store / MySQL 持久化
- 在
ServiceContext注册AgentProvider - 在
provider.go中初始化 Eino backend、ChatModel、DeepAgent 与工具集合 - 在 handler/logic 中暴露以下接口:
POST /api/file/session/createGET /api/file/session/listGET /api/file/session/detailGET /api/file/chat/streamGET /api/file/resume/stream
- 前端通过 SSE 消费流式事件,并根据事件类型渲染消息、工具轨迹和审批卡片
- 会话隔离维度:
user_identity + session_id - 消息持久化表:
agent_chat_sessionagent_chat_messageagent_chat_checkpoint
- 页面刷新后,前端先拉取 session 列表,再通过
session/detail恢复历史消息和待审批状态 - 中断恢复时,后端依据 checkpoint 恢复执行链,而不是重新从头跑一遍
- 所有敏感工具调用在真正执行前会先触发
approval_required - 前端收到事件后展示审批卡片,用户可选择继续或取消
- 用户操作后调用恢复流接口,Agent 再继续或终止对应工具调用
- 这类设计比前端本地弹窗更稳,因为审批状态可持久化、可刷新恢复、可审计
list_user_files:列出用户根目录或指定文件夹内容answer_from_file_urls:读取文本类文件并做问答/总结analyze_images_from_urls:对引用图片做多模态分析summarize_video_from_url:调用专用视频解释工具create_folder:创建文件夹move_file:移动文件或目录
- 页面入口:左侧导航“文件智能管家”
- 页面能力:
- 会话列表
- 消息流
- 审批卡片
- 文件引用弹层
- 文件引用时,前端提交
file_identity,后端校验权限后再换成受控 URL 交给 Agent,避免模型直接访问任意路径或长期有效外链
-
异步文件上传架构(⭐ 最新特性)
客户端上传 → API 接收 → 临时存储 + 计算 Hash ↓ 发送到 RabbitMQ → 立即返回 → 秒级响应 ↓ Worker 消费 → 压缩 + 上传 OSS → 更新数据库- 优势:
- 快速响应(< 1秒返回)
- 解耦上传和处理逻辑
- 支持高并发(可横向扩展 Worker)
- 任务可重试(失败 3 次后进死信队列)
- 技术栈: RabbitMQ (Direct Exchange) + Go Goroutine Pool
- 详细文档:
docs/异步文件上传架构设计.md
- 优势:
-
分片上传优化(⭐ 最新特性)
// 自动判断文件大小 if fileSize > 100MB { // 使用分片上传:10MB 分片 + 3 并发 UploadToOSSMultipart(filePath, fileName, fileSize) } else { // 普通上传 UploadToOSS(file, fileName) }
- 性能提升: 大文件上传速度提升 3-5 倍
- 并发控制: 使用信号量限制 3 个并发分片
- 重试机制: 每个分片最多重试 3 次
- 详细文档:
docs/OSS分片上传测试说明.md
-
自定义 JWT 中间件
- 问题:Go-Zero 内置 JWT 会读取整个 multipart/form-data,导致大文件上传性能问题
- 解决:自定义
FileAuthMiddleware,只在需要时解析请求体 - 参考:GitHub Issue #5401
- 详细文档:
docs/JWT中间件优化-文件上传认证.md
-
统一响应处理
- 修改 Go-Zero 代码生成模板,添加
common.Response()统一处理 - 避免在每个 handler 中重复封装响应格式
- 自动处理错误码和消息
- 修改 Go-Zero 代码生成模板,添加
-
布隆过滤器优化(⭐ 最新特性)
- 核心功能: 快速判断文件 hash 是否存在,提升文件秒传性能
- 技术实现:
- 使用 bloom/v3 库
- 预估参数:10000 元素,误判率 0.01
- O(1) 查询时间复杂度
- 持久化机制:
- 启动时从
bloom_filter.data文件加载 - 定期自动保存(默认 30 分钟间隔)
- 优雅关闭时强制保存
- 启动时从
- 配置方式:
# 在 .env 文件中配置(可选) BLOOM_FILTER_SAVE_INTERVAL=15m - 性能优势:
- 内存占用小(相比数据库查询)
- 查询速度快(避免数据库 IO)
- 自动容错(文件损坏时重建)
-
Agent + 工具审批架构(⭐ 最新特性)
- 核心能力:
- 使用 Eino DeepAgent 编排文件工具
- 使用 SSE 向前端持续推送模型输出与工具轨迹
- 对写操作工具增加审批中断,避免模型直接执行高风险命令
- 工程设计:
- 工具统一拆分到
core/internal/agent/einoagent/tools/ - 会话、消息、checkpoint 落库到 MySQL
- 前端刷新后可恢复历史对话与待审批状态
- 工具统一拆分到
- 核心能力:
-
双表架构设计
repository_pool (全局文件存储池) ├── hash (唯一索引) - 实现文件去重 └── path (OSS 路径) user_repository (用户文件关联表) ├── user_identity (用户 ID) ├── repository_identity (关联 repository_pool) └── parent_id (文件夹层级)- 优势: 文件去重、秒传、独立管理
- 详细文档:
docs/文件存储架构说明.md
- 查询性能: O(1) 时间复杂度,毫秒级响应
- 内存效率: 相比数据库查询减少 80% 内存占用
- 启动速度: 从文件加载比数据库查询快 10 倍
- 数据安全: 定期保存 + 优雅关闭,确保数据不丢失
-
RabbitMQ 异步处理
- 架构: Direct Exchange + Persistent Message + Manual Ack
- 队列配置:
- 交换机:
upload.event.exchange(direct) - 队列:
upload.process.queue(持久化) - 路由键:
upload.new
- 交换机:
- Worker 特性:
- QoS 限流:单个 Worker 最多处理 1 个任务
- 重试机制:失败最多重试 3 次
- 失败处理:自动 Nack 拒绝消息(可配置死信队列)
- 性能数据:
- 上传响应时间:< 1 秒
- 并发处理能力:可横向扩展 Worker 数量
- 任务成功率:> 99%
-
CTE 递归查询优化删除
WITH RECURSIVE folder_tree AS ( SELECT id FROM user_repository WHERE identity = ? UNION ALL SELECT ur.id FROM user_repository ur INNER JOIN folder_tree ft ON ur.parent_id = ft.id ) DELETE FROM user_repository WHERE id IN (SELECT id FROM folder_tree);
- 性能提升: 95%(避免 N+1 查询)
- 详细文档:
docs/代码审查-递归删除问题分析.md
-
分片上传优化
- 配置: 10MB 分片 + 3 并发 + 每片最多 3 次重试
- 阈值: 超过 100MB 自动启用分片上传
- 性能数据:
- 500MB 文件上传速度:3-4 MB/s
- 并发上传:最多 3 个分片同时上传
- 失败重试:每个分片独立重试
- 详细文档:
docs/OSS分片上传测试说明.md
-
智能压缩
- 视频: ffmpeg H.264 CRF=23,音频 128k
- 图片: 最大 1920x1080,JPEG 质量 85
- 节省空间: 平均压缩率 60%
- 详细文档:
docs/文件上传智能压缩功能.md
-
秒传机制
- 基于 MD5 hash 判断文件是否已存在
- 相同文件直接返回,无需上传
- 用户体验: 大文件秒传完成
完整的 OpenAPI 3.0 文档位于 core/docs/api/ 目录:
- user.yaml - 用户服务(登录、注册、验证码)
- file.yaml - 文件服务(上传、管理、文件夹操作)
- share.yaml - 分享服务(创建分享、保存资源)
# 使用 Swagger UI
npx swagger-ui-watcher core/docs/api/file.yaml
# 使用 Redoc
npx redoc-cli serve core/docs/api/file.yaml- Postman:File → Import → 选择 YAML 文件
- Apifox:导入 → OpenAPI → 选择 YAML 文件
修改 core/core.api 文件后,需要重新生成代码:
cd core
goctl api go -api core.api -dir . --style go_zerocd core
# 根据 core.api 生成代码
goctl api go -api core.api -dir . -style go_zero# 查看布隆过滤器状态(二进制文件)
cat ./bloom_filter.data
# 手动触发保存(开发调试用)
# 通过 SIGTERM 信号优雅关闭应用
kill -TERM <进程ID>
# 查看布隆过滤器相关日志
# 启动时:
tail -f logs/cloud_disk.log | grep "布隆过滤器"
# 运行时定期保存:
tail -f logs/cloud_disk.log | grep "定期保存"
# 优雅关闭时:
tail -f logs/cloud_disk.log | grep "优雅关闭"// 在代码中检查布隆过滤器状态
func debugBloomFilter(ctx *svc.ServiceContext) {
// 检查布隆过滤器是否初始化
if ctx.MyBloomFilter != nil {
log.Printf("布隆过滤器已初始化")
// 测试特定 hash 是否存在
exists := ctx.MyBloomFilter.IsFileExisted("some-hash-value")
log.Printf("Hash 存在性检查: %v", exists)
}
}# 监控布隆过滤器文件大小变化
watch -n 5 'ls -lh ./bloom_filter.data'
# 统计定期保存频率
grep "布隆过滤器定期保存完成" logs/cloud_disk.log | wc -l# 使用 xorm 工具生成模型
xorm reverse mysql "root:password@tcp(127.0.0.1:3306)/cloud_disk?charset=utf8mb4" templates/goxorm项目使用自定义的 Go-Zero 模板,位于 templates/ 目录(如果有)。
- 文件夹下载:异步任务 + 后台打包(详见
docs/文件夹下载方案.md) - 死信队列:RabbitMQ 配置死信队列处理失败任务
- 操作审计:记录 Agent 工具审批结果与执行人
- 文件夹下载接入 Agent:让 Agent 可解释压缩包内容与下载任务状态
- 文件预览:支持图片、视频、PDF 在线预览
- 回收站功能:软删除文件可恢复
- 文件版本管理:保留文件历史版本
- 任务监控面板:RabbitMQ 任务状态监控
- Agent 工具扩展:重命名、批量移动、分享创建、回收站恢复
- 下载统计:Redis 维护文件下载次数
- 分享密码:为分享链接添加密码保护
- 批量操作:批量删除、移动、下载
- 容量配额:用户存储空间限制
- 布隆过滤器监控面板:可视化监控布隆过滤器状态和性能
删除文件夹使用循环递归,存在 N+1 查询问题✅ 已修复(使用 CTE 递归)图片上传报 "file already closed" 错误✅ 已修复(同步上传,移除 goroutine)文件大小显示为原始大小,未使用压缩后大小✅ 已修复大文件上传性能问题✅ 已修复(使用分片上传)文件上传响应慢✅ 已修复(使用 RabbitMQ 异步处理)布隆过滤器数据丢失风险✅ 已修复(定期保存 + 优雅关闭)前端看不到文件智能管家入口✅ 已修复(已接入左侧导航和主区域路由)
| 指标 | 数值 | 说明 |
|---|---|---|
| API 响应时间 | < 1秒 | 文件上传接口响应时间 |
| 并发处理能力 | 可扩展 | 横向扩展 Worker 数量 |
| 任务成功率 | > 99% | 包含重试机制 |
| 重试次数 | 最多 3 次 | 失败后自动重试 |
| 文件大小 | 分片大小 | 并发数 | 平均速度 | 总耗时 |
|---|---|---|---|---|
| 100MB | 10MB | 3 | 3-4 MB/s | ~30秒 |
| 500MB | 10MB | 3 | 3-4 MB/s | ~2.5分钟 |
| 1GB | 10MB | 3 | 3-4 MB/s | ~5分钟 |
| 文件类型 | 原始大小 | 压缩后 | 压缩率 | 耗时 |
|---|---|---|---|---|
| 视频 (1080p) | 500MB | 180MB | 64% | ~2分钟 |
| 图片 (4K) | 8MB | 2MB | 75% | ~1秒 |
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
本项目采用 MIT 协议,详见 LICENSE 文件。
- 作者: xixiu
- 博客: [https://lonelymeko.top/blog]
- Email: [2477183238@qq.com]
- Go-Zero - 优秀的 Go 微服务框架
- Xorm - 简洁的 ORM 框架
- Aliyun OSS - 稳定的对象存储服务
⭐ 如果觉得项目不错,欢迎 Star 支持!