Skip to content

lonelymeko/xi_cloud_disk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

玺云盘 ☁️

基于 Go-Zero + MySQL + Redis + RabbitMQ + Aliyun OSS / Volcengine TOS 的轻量级云盘系统

前端试用地址:https://www.xixiu.top

Go Version Go-Zero License


🆕 最新更新

v2.4.0 (2026-04-07)

🤖 Eino Agent 集成(本次重点)

  • 新增文件智能管家:前端新增独立入口“文件智能管家”,支持多轮对话、引用云盘文件、会话切换
  • 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/ 等本地产物提交到仓库

v2.3.0 (2026-03-22)

🎉 Redis 能力升级(本次重点)

  • 文件列表数量缓存:新增用户目录列表 count 缓存,减少重复 COUNT 查询
    • 列表查询优先命中 Redis,未命中回源数据库并回写缓存
    • 文件新增/变更后自动失效对应目录计数缓存,保证数据一致性
  • 上传任务状态缓存(String):新增上传任务状态机缓存,状态值 0~4
    • 0 前端上传中
    • 1 服务端处理中/压缩中
    • 2 上传对象存储中
    • 3 写入数据库中
    • 4 上传成功
    • 任务状态 TTL 统一为 10 分钟,避免无效数据长期堆积
  • 分片状态缓存(Hash):新增分片进度缓存,Key 设计为 upload:task:{md5}
    • field 为分片序号,value 为该分片状态
    • 支持任务状态查询接口返回已上传分片信息,便于前端展示进度

🔧 相关接口与页面联动

  • 新增上传任务状态查询接口:POST /api/file/upload/status
  • 个人中心新增“上传任务状态”面板,轮询展示任务状态与分片上传进度

📌 其它同步优化

  • 数据看板改为真实接口数据,不再提供模拟数据入口
  • 上传/下载文件名一致性优化:任务名称与用户上传名称保持一致,下载优先使用文件展示名

v2.2.0 (2026-03-22)

🎉 功能更新

  • 直链复制能力增强:文件右键菜单支持复制图片与视频直链 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 选择存储实现

v2.1.0 (2026-02-18)

🎉 重大更新

  • 布隆过滤器优化:集成布隆过滤器提升文件秒传性能
    • O(1) 查询时间复杂度,毫秒级响应
    • 内存占用减少 80%(相比数据库查询)
    • 启动速度提升 10 倍(文件加载 vs 数据库查询)

🔧 核心功能

  • 自动持久化:定期保存到文件,支持快速重启恢复
    • 默认 30 分钟自动保存间隔
    • 支持环境变量配置保存频率
    • 优雅关闭时强制保存数据

📚 文档完善

  • 新增《布隆过滤器配置说明.md》
  • 更新 README 添加布隆过滤器详细说明
  • 完善性能数据和配置指南

v2.0.0 (2026-02-06)

🎉 重大更新

  • 异步文件上传:集成 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 布隆过滤器(文件秒传优化)

🚀 快速开始

1. 环境要求

  • Go 1.20+
  • MySQL 8.0+
  • Redis 5.0+
  • RabbitMQ 3.x+(新增)
  • FFmpeg 4.0+(可选,用于视频压缩)

2. 安装依赖

# 克隆项目
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

3. 配置文件

创建 .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

4. 数据库初始化

-- 执行 SQL 脚本(位于 docs/database/ 目录)
source docs/database/schema.sql

5. 运行服务

# 开发模式
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

6. RabbitMQ 配置(可选但推荐)

MacOS 安装 RabbitMQ

# 使用 Homebrew 安装
brew install rabbitmq

# 启动 RabbitMQ 服务
brew services start rabbitmq

# 访问管理界面
open http://localhost:15672
# 默认账号密码:guest / guest

Linux 安装 RabbitMQ

# 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_management

Docker 快速启动

docker run -d --name rabbitmq \
  -p 5672:5672 \
  -p 15672:15672 \
  -e RABBITMQ_DEFAULT_USER=guest \
  -e RABBITMQ_DEFAULT_PASS=guest \
  rabbitmq:3-management

验证 RabbitMQ 连接

# 在项目根目录运行测试
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))
    用户模块
      密码登录
      邮箱注册
      个人资料详情
    存储池模块
      中心存储池资源管理
        文件存储
      个人存储池资源管理
        文件关联存储
        文件夹层级管理
    文件共享模块
      文件分享
Loading

🎯 核心功能

1. 用户认证

  • ✅ 用户注册(邮箱验证码)
  • ✅ 用户登录(JWT Token)
  • ✅ 用户信息查询
  • ✅ 自定义 JWT 中间件(避免 Go-Zero 内置 JWT 性能问题)

2. 文件管理

  • ✅ 异步文件上传(RabbitMQ + 后台 Worker)
  • ✅ 智能压缩(视频/图片自动压缩)
  • ✅ 分片上传(大文件 >100MB 自动分片)
  • ✅ 文件秒传(基于 MD5 hash 去重)
  • ✅ 文件列表(分页 + 文件夹筛选)
  • ✅ 文件重命名
  • ✅ 文件移动
  • ✅ 文件/文件夹删除(CTE 递归优化)

3. 文件夹操作

  • ✅ 创建文件夹(多级目录)
  • ✅ 递归删除文件夹(使用 CTE 递归查询,性能提升 95%)
  • ✅ 移动文件夹
  • ⏳ 文件夹下载(异步打包)- 详见 docs/文件夹下载方案.md

4. 文件分享

  • ✅ 创建分享链接(支持过期时间)
  • ✅ 获取分享详情(公开访问)
  • ✅ 保存分享资源到个人网盘

5. 文件智能管家

  • ✅ 基于 Eino Agent 的多轮对话
  • ✅ SSE 流式输出 assistant 内容、tool call、tool result、approval_required
  • ✅ 在聊天框引用用户文件,不直接暴露裸 OSS URL
  • ✅ 会话列表、历史消息恢复、待审批状态恢复
  • ✅ 多工具协同:文档、图片、视频、目录操作

🤖 Agent 设计

架构概览

前端 文件智能管家
    ↓
SSE /api/file/chat/stream
    ↓
Go-Zero Handler / Logic
    ↓
ServiceContext.AgentProvider
    ↓
Eino DeepAgent + ChatModel + Tool Middleware
    ↓
文件工具 / 审批中断 / Checkpoint Store / MySQL 持久化

接入方式

  1. ServiceContext 注册 AgentProvider
  2. provider.go 中初始化 Eino backend、ChatModel、DeepAgent 与工具集合
  3. 在 handler/logic 中暴露以下接口:
    • POST /api/file/session/create
    • GET /api/file/session/list
    • GET /api/file/session/detail
    • GET /api/file/chat/stream
    • GET /api/file/resume/stream
  4. 前端通过 SSE 消费流式事件,并根据事件类型渲染消息、工具轨迹和审批卡片

会话与持久化设计

  • 会话隔离维度:user_identity + session_id
  • 消息持久化表:
    • agent_chat_session
    • agent_chat_message
    • agent_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,避免模型直接访问任意路径或长期有效外链

🌟 项目亮点

架构设计

  1. 异步文件上传架构(⭐ 最新特性)

    客户端上传 → API 接收 → 临时存储 + 计算 Hash
         ↓
    发送到 RabbitMQ → 立即返回 → 秒级响应
         ↓
    Worker 消费 → 压缩 + 上传 OSS → 更新数据库
    
    • 优势:
      • 快速响应(< 1秒返回)
      • 解耦上传和处理逻辑
      • 支持高并发(可横向扩展 Worker)
      • 任务可重试(失败 3 次后进死信队列)
    • 技术栈: RabbitMQ (Direct Exchange) + Go Goroutine Pool
    • 详细文档: docs/异步文件上传架构设计.md
  2. 分片上传优化(⭐ 最新特性)

    // 自动判断文件大小
    if fileSize > 100MB {
        // 使用分片上传:10MB 分片 + 3 并发
        UploadToOSSMultipart(filePath, fileName, fileSize)
    } else {
        // 普通上传
        UploadToOSS(file, fileName)
    }
    • 性能提升: 大文件上传速度提升 3-5 倍
    • 并发控制: 使用信号量限制 3 个并发分片
    • 重试机制: 每个分片最多重试 3 次
    • 详细文档: docs/OSS分片上传测试说明.md
  3. 自定义 JWT 中间件

    • 问题:Go-Zero 内置 JWT 会读取整个 multipart/form-data,导致大文件上传性能问题
    • 解决:自定义 FileAuthMiddleware,只在需要时解析请求体
    • 参考:GitHub Issue #5401
    • 详细文档: docs/JWT中间件优化-文件上传认证.md
  4. 统一响应处理

    • 修改 Go-Zero 代码生成模板,添加 common.Response() 统一处理
    • 避免在每个 handler 中重复封装响应格式
    • 自动处理错误码和消息
  5. 布隆过滤器优化(⭐ 最新特性)

    • 核心功能: 快速判断文件 hash 是否存在,提升文件秒传性能
    • 技术实现:
      • 使用 bloom/v3
      • 预估参数:10000 元素,误判率 0.01
      • O(1) 查询时间复杂度
    • 持久化机制:
      • 启动时从 bloom_filter.data 文件加载
      • 定期自动保存(默认 30 分钟间隔)
      • 优雅关闭时强制保存
    • 配置方式:
      # 在 .env 文件中配置(可选)
      BLOOM_FILTER_SAVE_INTERVAL=15m
    • 性能优势:
      • 内存占用小(相比数据库查询)
      • 查询速度快(避免数据库 IO)
      • 自动容错(文件损坏时重建)
  6. Agent + 工具审批架构(⭐ 最新特性)

    • 核心能力:
      • 使用 Eino DeepAgent 编排文件工具
      • 使用 SSE 向前端持续推送模型输出与工具轨迹
      • 对写操作工具增加审批中断,避免模型直接执行高风险命令
    • 工程设计:
      • 工具统一拆分到 core/internal/agent/einoagent/tools/
      • 会话、消息、checkpoint 落库到 MySQL
      • 前端刷新后可恢复历史对话与待审批状态
  7. 双表架构设计

    repository_pool (全局文件存储池)
    ├── hash (唯一索引) - 实现文件去重
    └── path (OSS 路径)
    
    user_repository (用户文件关联表)
    ├── user_identity (用户 ID)
    ├── repository_identity (关联 repository_pool)
    └── parent_id (文件夹层级)
    
    • 优势: 文件去重、秒传、独立管理
    • 详细文档: docs/文件存储架构说明.md

性能优化

布隆过滤器性能表现

  • 查询性能: O(1) 时间复杂度,毫秒级响应
  • 内存效率: 相比数据库查询减少 80% 内存占用
  • 启动速度: 从文件加载比数据库查询快 10 倍
  • 数据安全: 定期保存 + 优雅关闭,确保数据不丢失
  1. 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%
  2. 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
  3. 分片上传优化

    • 配置: 10MB 分片 + 3 并发 + 每片最多 3 次重试
    • 阈值: 超过 100MB 自动启用分片上传
    • 性能数据:
      • 500MB 文件上传速度:3-4 MB/s
      • 并发上传:最多 3 个分片同时上传
      • 失败重试:每个分片独立重试
    • 详细文档: docs/OSS分片上传测试说明.md
  4. 智能压缩

    • 视频: ffmpeg H.264 CRF=23,音频 128k
    • 图片: 最大 1920x1080,JPEG 质量 85
    • 节省空间: 平均压缩率 60%
    • 详细文档: docs/文件上传智能压缩功能.md
  5. 秒传机制

    • 基于 MD5 hash 判断文件是否已存在
    • 相同文件直接返回,无需上传
    • 用户体验: 大文件秒传完成

📚 API 文档

完整的 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 文件

🔧 开发指南

API 接口更新

修改 core/core.api 文件后,需要重新生成代码:

cd core
goctl api go -api core.api -dir . --style go_zero

生成代码

cd 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/ 目录(如果有)。


📋 TODO

高优先级

  • 文件夹下载:异步任务 + 后台打包(详见 docs/文件夹下载方案.md
  • 死信队列:RabbitMQ 配置死信队列处理失败任务
  • 操作审计:记录 Agent 工具审批结果与执行人
  • 文件夹下载接入 Agent:让 Agent 可解释压缩包内容与下载任务状态

中优先级

  • 文件预览:支持图片、视频、PDF 在线预览
  • 回收站功能:软删除文件可恢复
  • 文件版本管理:保留文件历史版本
  • 任务监控面板:RabbitMQ 任务状态监控
  • Agent 工具扩展:重命名、批量移动、分享创建、回收站恢复

低优先级

  • 下载统计:Redis 维护文件下载次数
  • 分享密码:为分享链接添加密码保护
  • 批量操作:批量删除、移动、下载
  • 容量配额:用户存储空间限制
  • 布隆过滤器监控面板:可视化监控布隆过滤器状态和性能

🐛 已知问题

  1. 删除文件夹使用循环递归,存在 N+1 查询问题 ✅ 已修复(使用 CTE 递归)
  2. 图片上传报 "file already closed" 错误 ✅ 已修复(同步上传,移除 goroutine)
  3. 文件大小显示为原始大小,未使用压缩后大小 ✅ 已修复
  4. 大文件上传性能问题 ✅ 已修复(使用分片上传)
  5. 文件上传响应慢 ✅ 已修复(使用 RabbitMQ 异步处理)
  6. 布隆过滤器数据丢失风险 ✅ 已修复(定期保存 + 优雅关闭)
  7. 前端看不到文件智能管家入口 ✅ 已修复(已接入左侧导航和主区域路由)

📊 性能数据

异步上传性能

指标 数值 说明
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!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交 Pull Request

📄 开源协议

本项目采用 MIT 协议,详见 LICENSE 文件。


📞 联系方式


🙏 致谢

  • Go-Zero - 优秀的 Go 微服务框架
  • Xorm - 简洁的 ORM 框架
  • Aliyun OSS - 稳定的对象存储服务

⭐ 如果觉得项目不错,欢迎 Star 支持!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors