Skip to content

springmeng/AI-Cloud-Storage-System

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🦝 小浣熊网盘 (smart-disk)

Spring Boot Java Vue.js Vite Python FastAPI MySQL Redis License

一个集「存・管・享・预览・智能问答」于一体的个人云网盘系统

支持文件全格式预览 | 分片秒传 | 在线分享 | 智能文档 RAG 问答 | 多端响应式

快速开始 · 功能特性 · 技术架构 · 项目结构 · 数据库说明


📖 项目简介

小浣熊网盘(smart-disk) 是一个采用前后端分离 + AI 微服务三层架构的现代化云存储系统。系统围绕「存、管、享、预览」形成网盘业务闭环,并集成 基于 RAG(检索增强生成)的智能文档 能力——用户可将授权范围内的文档建立向量索引,进行多轮检索问答,同时支持在预览场景下提取文档要点摘要。

整体由 Vue 3 前端、Spring Boot 3 后端、Python FastAPI RAG 服务 三个独立运行时构成。Java 后端作为 BFF(Backend For Frontend)统一负责 Session 鉴权与文件归属校验后,再以内网调用方式访问 Python RAG 服务;向量检索、对话生成与会话持久化分工明确:MySQL 保存业务真相与 AI 台账,Chroma 保存向量,FastAPI 负责编排与模型调用。


✨ 核心亮点

  • 🗂️ 完整网盘业务闭环 - 上传、预览、分享、回收站、空间配额一站式管理
  • 🤖 智能文档 RAG 问答 - 多文件知识库 + SSE 流式回答 + 引用溯源
  • 🔁 大文件分片秒传 - 基于 spark-md5 的客户端分片 + 服务端 MD5 秒传
  • 🎬 全格式在线预览 - PDF / Office / 图片 / 文本 / 代码高亮 / HLS 音视频
  • 🛡️ 权限分层 + AOP 拦截 - 登录、管理员、参数校验通过自定义注解一键开启
  • 🔌 可插拔 AI 后端 - 支持本地 Ollama / 云端 DeepSeek / OpenAI 兼容嵌入
  • 🧱 BFF 内网网关 - Java 统一鉴权后以 X-Internal-Token 内网调用 Python RAG
  • 🧹 向量与文件联动清理 - 网盘删文件时异步清理 Chroma 向量与索引台账
  • 👨‍💼 后台管理系统 - 系统设置、用户管理、空间调整、用户文件运维

🌟 功能特性

📁 文件管理

  • 文件上传(分片上传、MD5 秒传、断点续传)
  • 文件列表(分类视图 / 目录视图 / 网格视图)
  • 文件操作(重命名、移动、复制、删除)
  • 文件分类(视频、音频、图片、文档、其他)
  • 最近上传与最近访问
  • 多选与批量操作
  • 全文件类型在线预览

👁️ 在线预览

  • 📄 PDF 预览(vue-pdf-embed
  • 📝 Office 预览(docx-previewxlsx
  • 🖼️ 图片预览(缩放、旋转)
  • 🎬 视频预览(DPlayer + HLS 自动转码)
  • 🎵 音频播放(aplayer)
  • 💻 代码高亮(highlight.js,支持多语言)
  • 📜 文本预览(Markdown 渲染)

🔗 文件分享

  • 创建分享(有效期:1 天 / 7 天 / 30 天 / 永久)
  • 提取码保护
  • 分享浏览次数统计
  • 访客无登录访问
  • 取消分享 / 查看分享列表

♻️ 回收站

  • 删除文件软删除入回收站
  • 一键还原
  • 永久删除
  • 定时任务自动清理过期回收站
  • 同步触发向量库清理

🤖 智能文档 (AI / RAG)

  • 多选网盘文件建立 / 增量更新 个人知识库
  • 多轮会话管理(会话列表、重命名、删除)
  • SSE 流式逐字 输出,回答带引用文件
  • @ 文件指令引入上下文
  • 预览页一键「提取要点摘要」
  • 知识库管理:查看索引台账、从知识库移除
  • 文档支持:txt / md / pdf / docx / xlsx / pptx / html 等

🔐 用户系统

  • 用户名 + 密码注册登录
  • 邮箱验证码 + 图形验证码
  • QQ 互联登录(回调集成)
  • 修改密码 / 修改头像
  • 个人空间配额管理
  • 个人中心

🛡️ 后台管理

  • 系统设置(注册开关、默认空间等)
  • 用户管理(启用 / 禁用 / 调整空间)
  • 用户文件查看(管理员视角浏览全部用户文件)
  • 超级管理员通过 admin.nick-names 配置识别

🛠️ 技术架构

后端技术栈(smart-disk-java)

技术 版本 说明
Spring Boot 3.5.13 核心框架
Java 21 运行时与编译目标(Maven Enforcer 强制)
MySQL 8.0+ 业务数据库
MyBatis-Plus 3.5.16 ORM、分页、条件查询
Druid 1.2.28 数据库连接池
Redis (Lettuce) - Session 缓存 / 业务缓存
OkHttp 4.12.0 调用 local_rag 内网 HTTP / SSE
Apache POI 5.2.5 Office 文档解析
PDFBox 2.0.31 PDF 文本抽取
Jsoup 1.17.2 HTML 解析
Fastjson 1.2.83 JSON 序列化
FFmpeg 外部依赖 视频转码 / HLS 切片
Spring Mail - 邮件验证码
AOP - 统一登录 / 管理员 / 参数校验切面

前端技术栈(smart-disk-front)

技术 版本 说明
Vue 3.2.x 单页应用 UI
Vite 5.4.x 开发服务器与生产构建
Element Plus 2.2.x 组件库
Pinia 2.0.x 状态管理(含智能文档 store)
Vue Router 4.1.x 路由 + needLogin 守卫
Axios 1.3.x HTTP 请求封装
Marked 18.x AI 回答 Markdown 渲染
highlight.js 11.x 代码高亮
vue-pdf-embed 1.1.x PDF 在线预览
docx-preview 0.1.x Word 在线预览
xlsx 0.18.x Excel 在线预览
DPlayer / hls.js - 视频播放(含 HLS)
APlayer - 音频播放
spark-md5 3.0.x 客户端分片 MD5 计算
dompurify 3.4.x XSS 防御
Sass 1.59.x 样式预处理

AI / RAG 技术栈(local_rag-main)

技术 / 组件 形态 用途
Python 3.12(uv 管理) RAG 服务运行时
FastAPI + Uvicorn HTTP 服务 对内 /internal/* API
LangChain 文档分片、向量库、LLM 链 ingest、summary、对话
LangGraph / MemorySaver 进程内 thread_id 的多轮会话记忆
Chroma 持久化目录 chroma_db/ 按用户 collection 存储向量
Ollama 默认 本地对话 LLM 与 Embedding
DeepSeek / OpenAI-compatible 可配置 云端对话或 Embedding 替代方案
RecursiveCharacterTextSplitter chunk 1000 / overlap 200 文档分片
sentence-transformers HuggingFace 本地 可选的本地 Embedding 方案

📂 项目结构

smart-disk/                            # 项目根目录
├── docs/                              # 项目文档
│   ├── 小浣熊网盘-技术文档.md          # 技术说明
│   ├── 小浣熊网盘-部署文档.md          # 部署指南
│   └── rag优化.md                     # RAG 优化方案
│
├── smart-disk-java/                   # 后端项目(Spring Boot 3.5 + Java 21)
│   ├── src/main/
│   │   ├── java/com/smartdisk/
│   │   │   ├── SmartDiskApplication.java   # 启动入口
│   │   │   ├── controller/                 # REST Controller
│   │   │   │   ├── AccountController.java     # 注册 / 登录 / 验证码
│   │   │   │   ├── FileInfoController.java    # 文件 CRUD / 分片上传 / 预览
│   │   │   │   ├── ShareController.java       # 分享管理(登录用户)
│   │   │   │   ├── WebShareController.java    # 分享访问(访客)
│   │   │   │   ├── RecycleController.java     # 回收站
│   │   │   │   ├── AdminController.java       # 后台管理
│   │   │   │   ├── AiController.java          # AI / RAG 入口
│   │   │   │   └── AiChatController.java      # AI 会话与消息
│   │   │   ├── service/                    # 业务服务层
│   │   │   │   ├── FileInfoService(Impl)
│   │   │   │   ├── FileShareService(Impl)
│   │   │   │   ├── UserInfoService(Impl)
│   │   │   │   ├── EmailCodeService(Impl)
│   │   │   │   ├── AiFileIndexService          # 知识库索引台账
│   │   │   │   ├── AiChatThreadService         # AI 会话与消息
│   │   │   │   ├── RagProxyService             # 组装 / 转发 RAG 请求
│   │   │   │   ├── RagVectorCleanupService     # 删文件同步清理向量
│   │   │   │   └── DocumentPlainTextService    # 多格式文档纯文本抽取
│   │   │   ├── mappers/                    # MyBatis-Plus Mapper
│   │   │   ├── entity/
│   │   │   │   ├── po/                     # 持久化对象
│   │   │   │   ├── dto/                    # 数据传输对象
│   │   │   │   ├── vo/                     # 视图对象
│   │   │   │   ├── config/                 # 业务配置类
│   │   │   │   └── constants/              # 常量
│   │   │   ├── aspect/                     # AOP 切面(全局拦截器)
│   │   │   ├── component/                  # Redis / RAG 客户端组件
│   │   │   ├── config/                     # AI / RAG 配置 Properties
│   │   │   ├── task/                       # 定时任务(如回收站清理)
│   │   │   ├── utils/                      # 工具类(OKHttp、JSON、日期等)
│   │   │   └── spring/                     # Spring 上下文工具
│   │   └── resources/
│   │       ├── application.yml             # 主配置(DB / Redis / RAG / AI)
│   │       ├── logback-spring.xml          # 日志配置
│   │       └── com/smartdisk/mappers/      # MyBatis XML 映射
│   ├── ffmpeg/                             # FFmpeg 可执行目录(视频转码)
│   ├── smart-disk.sql                      # 数据库初始化脚本
│   └── pom.xml                             # Maven 依赖
│
├── smart-disk-front/                  # 前端项目(Vue 3 + Vite 5)
│   ├── src/
│   │   ├── views/                          # 页面
│   │   │   ├── Login.vue                       # 登录注册
│   │   │   ├── Framework.vue                   # 主框架
│   │   │   ├── main/                           # 主页 / 上传 / 我的分享
│   │   │   ├── smart-doc/SmartDocWorkspace.vue # 智能文档工作台
│   │   │   ├── share/                          # 我的分享
│   │   │   ├── webshare/                       # 访客分享访问
│   │   │   ├── recycle/                        # 回收站
│   │   │   ├── admin/                          # 后台管理
│   │   │   ├── UpdatePassword.vue
│   │   │   ├── UpdateAvatar.vue
│   │   │   └── QqLoginCallback.vue
│   │   ├── components/                     # 公共组件
│   │   │   ├── preview/                        # 文件预览组件集
│   │   │   ├── ai/                             # AI 相关组件
│   │   │   │   ├── KnowledgeBaseManage.vue
│   │   │   │   ├── KnowledgeBaseWizard.vue
│   │   │   │   ├── FileMentionComposer.vue
│   │   │   │   ├── DiskFilePicker.vue
│   │   │   │   ├── PreviewAiToolbar.vue
│   │   │   │   ├── MarkdownMessage.vue
│   │   │   │   └── SmartDocDemoHost.vue
│   │   │   ├── Avatar.vue / AvatarUpload.vue
│   │   │   ├── Dialog.vue / Window.vue
│   │   │   ├── Table.vue / Navigation.vue
│   │   │   ├── FolderSelect.vue / NoData.vue
│   │   │   └── Icon.vue
│   │   ├── api/aiRag.js                    # AI / RAG 前端 API(含 SSE 解析)
│   │   ├── router/                         # Vue Router 路由
│   │   ├── stores/                         # Pinia 状态管理
│   │   ├── utils/                          # Request / Message / Verify 等
│   │   ├── assets/                         # 静态资源(图标、样式)
│   │   └── main.js                         # 应用入口
│   ├── public/                             # 公共静态资源
│   ├── index.html
│   ├── vite.config.js                      # Vite 配置(含 /api 代理)
│   └── package.json
│
├── local_rag-main/                    # AI / RAG 微服务(Python 3.12 + FastAPI)
│   ├── rag.py                              # FastAPI 入口(含 /internal/* 接口)
│   ├── rag_pipeline.py                     # 统一 RAG 流水线(路由 / 检索 / 生成)
│   ├── app.py                              # Streamlit 演示界面
│   ├── settings.py                         # 读取与校验 config.yaml
│   ├── logging_config.py                   # 日志配置
│   ├── config.yaml                         # LLM / Embedding Provider 配置
│   ├── pyproject.toml / uv.lock            # uv 依赖管理
│   ├── requirements.txt                    # 兼容 pip 的依赖列表
│   ├── chroma_db/                          # 向量数据库持久化目录
│   └── .env                                # 密钥与内网 Token
│
└── project-folder/                    # 网盘文件存储根目录(运行时生成)
    ├── file/                               # 用户文件按日期分目录存储
    ├── temp/                               # 分片上传临时目录
    └── logs/                               # 运行日志

🚀 快速开始

环境要求

软件 版本要求
JDK 21 或以上
Maven 3.8+
Node.js 18 LTS 或 20 LTS
Python 3.10+(推荐 3.12,与 local_rag-main 一致)
MySQL 8.0+ 推荐
Redis 5.0+
Ollama 任意版本(启用本地 LLM 时可选)
FFmpeg 任意版本(启用视频转码时可选)

后端部署

1. 初始化数据库

# 登录 MySQL
mysql -u root -p

# 创建数据库
CREATE DATABASE `smart-disk` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

# 导入初始化脚本
USE `smart-disk`;
SOURCE smart-disk-java/smart-disk.sql;

2. 修改后端配置

编辑 smart-disk-java/src/main/resources/application.yml

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/smart-disk?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=false
    username: root              # 修改为你的数据库用户名
    password: your_password     # 修改为你的数据库密码

  data:
    redis:
      host: 127.0.0.1
      port: 6379
      password: foobared        # 修改为你的 Redis 密码

# 项目目录(用斜杠分隔,Windows 示例)
project:
  folder: G:/pan/smart-disk/project-folder
  ffmpeg-bin: G:/pan/smart-disk/smart-disk-java/ffmpeg/bin   # 不用视频可留空

# 超级管理员(按登录昵称白名单判定)
admin:
  nick-names: admin

# RAG 内网代理;与 Python 环境变量 RAG_INTERNAL_TOKEN 保持一致
rag:
  enabled: true
  base-url: http://127.0.0.1:8000
  internal-token: "your_random_token"

3. 启动后端

cd smart-disk-java
mvn clean package -DskipTests
mvn spring-boot:run

# 或直接通过 IDEA 启动 SmartDiskApplication

启动成功后访问 http://127.0.0.1:7090/api(返回 404 属正常)。

前端部署

cd smart-disk-front

# 安装依赖(推荐使用国内镜像)
npm config set registry https://registry.npmmirror.com
npm install

# 启动开发服务器
npm run dev

# 生产构建
npm run build

浏览器打开 http://127.0.0.1:1024 即可访问。

RAG 智能文档服务部署

1. 安装 Python 依赖

cd local_rag-main

# 方式一:uv(推荐)
uv sync

# 方式二:pip
pip install -r requirements.txt

2. 配置 .envconfig.yaml

local_rag-main/ 目录创建 .env

# 与 Java 端 rag.internal-token 保持一致
RAG_INTERNAL_TOKEN=your_random_token

# DeepSeek 模式时配置(可选)
DEEPSEEK_API_KEY=sk-your-key

编辑 config.yaml 选择 LLM 与嵌入后端:

llm:
  provider: ollama              # 可选:ollama / deepseek
  ollama:
    base_url: http://127.0.0.1:11434
    chat_model: qwen3.5:4b

embeddings:
  provider: ollama
  ollama:
    embed_model: nomic-embed-text

3. 拉取 Ollama 模型(使用 Ollama 模式时)

ollama pull nomic-embed-text
ollama pull qwen3.5:4b

4. 启动 RAG 服务

# uv 方式
uv run python rag.py

# 或者
python rag.py

启动成功后访问 http://127.0.0.1:8000/docs 查看 API 文档。

验收

  1. 浏览器打开 http://127.0.0.1:1024 → 注册 / 登录
  2. 上传文件、预览图片或 PDF
  3. 进入「智能文档」→ 选择 txt/md/pdf/docx 文件 → 建立知识库
  4. 新建会话提问,观察 SSE 流式逐字回答

🗄️ 数据库说明

主要数据表

表名 说明
用户与认证
user_info 用户信息表(含 QQ 登录、空间配额)
email_code 邮箱验证码表
网盘核心
file_info 文件元信息(含分类、转码状态、回收站标记)
file_share 文件分享记录(有效期、提取码、浏览次数)
智能文档 AI
ai_chat_thread AI 智能文档会话表
ai_chat_message AI 会话消息表(含引用来源 JSON)
ai_file_index AI 知识库索引台账(indexed / failed / removed)

关键字段速览

file_info:使用 file_category 区分(1视频 / 2音频 / 3图片 / 4文档 / 5其他),file_type 进一步细分;del_flag 0/1/2 表示删除/回收站/正常。

ai_file_index:以 (user_id, file_id) 作为唯一键,状态机覆盖索引/失败/移除全过程。

ai_chat_messageextra_json 存储引用来源(citations)等扩展信息,配合前端渲染引用气泡。


⚙️ 配置说明

端口与服务地址速查

服务 默认地址 备注
前端(开发) http://127.0.0.1:1024 Vite 开发服务器
Java API http://127.0.0.1:7090/api Spring Boot 后端
RAG 文档 http://127.0.0.1:8000/docs FastAPI 内网服务
Ollama http://127.0.0.1:11434 本地 LLM 网关
MySQL 127.0.0.1:3306 业务数据库
Redis 127.0.0.1:6379 Session / 缓存

关键配置项

配置前缀 说明
spring.datasource MySQL 连接(Druid 连接池)
spring.data.redis Redis 连接
spring.mail SMTP 邮件服务(验证码)
project.folder 网盘文件根目录
project.ffmpeg-bin FFmpeg 可执行目录(视频转码 / HLS)
admin.nick-names 超级管理员昵称白名单(逗号分隔)
rag.enabled 是否启用智能文档能力
rag.base-url RAG 服务内网地址
rag.internal-token 内网鉴权令牌(必须与 RAG 端 .env 一致)
rag.connect-timeout-ms / rag.read-timeout-ms RAG 调用超时(流式建议 300000)
ai.chat.persist.enabled 是否启用服务端会话 / 消息持久化

安全建议

  • 生产环境通过 环境变量外部配置中心 覆盖数据库密码、Redis 密码、rag.internal-token、邮件凭证
  • 避免 将真实密钥提交到版本库(项目已通过 .gitignore 排除 .envconfig.yaml
  • RAG 服务 :8000 端口 不要对公网开放,仅允许 Java 后端在内网调用
  • 文件归属校验严格基于 Session 用户身份,不可 信任请求体中的 userId 字段

📸 系统截图

输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明

💬 联系与反馈

如有问题或建议,欢迎通过以下方式联系:

  • 🐛 提交 Issue
  • ⭐ 给项目点个 Star 支持一下

🙏 致谢

感谢以下开源项目:


**如果这个项目对你有帮助,请点个 ⭐ Star 支持一下!**

Made with ❤️ by 小孟全栈开发团队

About

小浣熊AI网盘系统整体由 Vue 3 前端、SpringBoot 3 后端、Python FastAPI RAG 服务 三个独立运行时构成,项目带AI功能,非常智能。star支持。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors