Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

文件分享与协同系统

本项目是一个基于 Spring Boot 与 Vue 3 的前后端分离系统,面向个人和小型团队的文件存储、共享与协作场景。系统围绕文件全生命周期管理进行设计,实现了上传、检索、分享、协作、备份与监控等核心能力,可作为毕业设计、课程设计和工程化实践项目使用。

项目背景

在教学与办公场景中,用户常常需要跨设备管理文件、与他人共享资料,并在同一文档上进行实时协作。传统文件传输方式存在管理分散、权限控制薄弱、协作效率低等问题。本项目以云盘系统为载体,结合对象存储、实时通信与权限控制机制,构建一套可部署、可扩展、可维护的文件分享平台。

项目目标如下:

  1. 提供完整且安全的文件管理与分享能力。
  2. 支持大文件上传、断点续传和秒传,提升传输效率。
  3. 支持多人实时协作,提升团队协同体验。
  4. 提供备份恢复与运行监控,增强系统可运维性。

实现功能

系统功能围绕“用户身份、文件资产、传输效率、共享协作、数据安全”五个核心目标展开,覆盖从注册登录、文件管理,到分享、协作、运维保障的完整链路。下面按照实际业务使用路径进行展开,便于在论文、答辩和项目演示中直接说明。

1. 用户与权限管理

作用:负责系统入口控制、身份识别和权限边界划分,是所有业务功能运行的前提。

  1. 提供用户注册、登录、退出登录、密码修改和个人资料维护等基础生命周期能力,支持用户从首次进入系统到长期使用的完整流程。
  2. 登录后通过 JWT 签发访问令牌,后续请求由统一过滤器解析用户身份并注入上下文,避免服务端维护传统会话状态,更适合前后端分离部署。
  3. 通过角色和权限控制区分普通用户、管理员和系统内部接口,确保文件管理、分享管理、备份运维等敏感操作只能由授权主体访问。
  4. 对公开接口、登录接口、受保护接口和管理接口进行分层处理,减少未授权访问和越权调用的风险。
  5. 用户身份信息不仅用于鉴权,也会作为文件归属、协作成员、分享访问、行为日志等业务记录的基础字段,形成完整的可追踪链路。

2. 文件管理

作用:负责文件从进入系统到最终被使用、整理和归档的全过程,是网盘系统最核心的业务能力。

  1. 支持文件上传、下载、在线预览、重命名、移动、复制、收藏、删除等高频操作,覆盖用户日常文件管理的大部分场景。
  2. 支持目录层级管理,用户可以像本地文件系统一样创建文件夹、整理资源、移动目录和构建个人文件树,提升资源组织效率。
  3. 文件上传前会进行基础元数据校验、文件名规范检查、存储路径计算和重复文件检测,避免脏数据进入系统。
  4. 文件下载和预览会先完成权限校验,再定位到真实存储资源并输出流,保证每次访问都经过授权判断。
  5. 文件管理操作与数据库记录、实际存储对象、回收站状态保持一致,避免出现“数据库有记录但文件丢失”或“文件存在但记录缺失”的不一致问题。

3. 高效上传能力

作用:提升大文件场景下的传输稳定性和速度,减少网络波动对用户体验的影响。

  1. 支持分片上传,前端将大文件切分为多个小块并发传输,后端按分片索引接收后落盘到临时目录,降低单次请求压力。
  2. 支持断点续传,上传过程中如果网络中断或页面刷新,用户可以只补传缺失分片,而不必从头开始传输整个文件。
  3. 支持基于哈希的秒传机制,当目标文件的哈希值已经存在时,可以直接复用已有文件对象,显著减少重复上传时间。
  4. 文件分片完成后会执行合并和完整性校验,确保最终生成的文件与源文件一致,避免出现分片丢失或内容损坏。
  5. 该能力特别适合课程项目、资料包、视频、压缩包等大体积资源上传场景,在网络不稳定时仍能保持较好的用户体验。

4. 分享与快传

作用:实现“受控共享”,在保证权限边界的前提下让文件能够安全流转到系统内外。

  1. 支持生成短链分享链接,用户可以将资源快速分发给他人,而无需暴露完整文件路径或内部实现细节。
  2. 支持设置提取码、有效期、访问限制和下载限制,避免链接被长期滥用或被无关人员随意访问。
  3. 支持一次性下载令牌,访问一次后即失效,适合临时交付、敏感资料传递和短时协作场景。
  4. 支持文本快传和文件快传,既可以分享一段临时文本,也可以快速分发单个文件或附件。
  5. 系统会记录分享访问、提取码验证和下载行为,为后续统计分析、审计追溯和安全排查提供依据。

5. 协作能力

作用:支持多人在线编辑和交流,把传统网盘扩展为具备团队协同能力的平台。

  1. 支持协作项目、成员管理、文档管理和评论交流等完整协作流程,适合小组作业、团队文档和联合编辑场景。
  2. 基于 WebSocket 建立长连接,实现低延迟消息广播,使多人修改内容时能够快速看到彼此的变更。
  3. 采用增量协同模式,通过实时同步编辑内容而不是反复发送整份文档,减少传输量并提升同步效率。
  4. 通过会话和房间机制隔离不同协作空间,避免不同项目之间的消息串扰和数据混发。
  5. 初始同步、后续增量更新和断线重连机制共同保证多端状态一致,使编辑体验更接近实时协作软件。

6. 数据安全与运维

作用:保障系统在日常使用、异常恢复和生产维护中的可靠性,是系统长期可用的基础。

  1. 支持回收站机制,删除的文件默认进入可恢复状态而不是立即物理删除,降低误删带来的损失。
  2. 支持全量备份、增量备份、备份校验和恢复操作,可用于日常维护、容灾演练和故障回滚。
  3. 提供健康检查和监控指标输出,便于观察系统状态、排查异常和评估容量情况。
  4. 本地存储与 MinIO 双模式可切换,既能满足教学环境下的本地部署,也能满足对象存储场景下的生产化使用。
  5. 运维能力不仅关注“系统能运行”,也关注“系统出问题后能恢复”,因此在备份、校验、恢复和日志追踪上都进行了设计。

运行环境

建议环境如下:

  1. 操作系统:Windows、Linux 或 macOS。
  2. JDK:17 或以上。
  3. Maven:3.6 或以上。
  4. Node.js:18 或以上。
  5. MySQL:8.0 或以上。
  6. Docker:20.10 或以上,Compose Plugin 2.x(用于容器化部署)。

主要技术栈如下:

  1. 后端:Spring Boot 2.7.5、Spring Security、Spring Data JPA、WebSocket、Actuator、MinIO SDK。
  2. 前端:Vue 3、TypeScript、Vite 5、Pinia、Vue Router、Element Plus。

部署步骤

一、本地开发部署

  1. 初始化数据库。
  2. 执行根目录 SQL 脚本 setup_mysql.sql 或 database_setup.sql。
  3. 根据实际环境修改 src/main/resources/application.yml 中的数据库连接配置。
  4. 启动后端。
  5. 在项目根目录执行 mvn spring-boot:run。
  6. 默认提供 HTTPS 8443,HTTP 8080 将重定向到 8443。
  7. 启动前端。
  8. 进入 frontend 目录后执行 npm install 与 npm run dev。
  9. 前端默认访问地址为 http://localhost:3000。

二、Docker 一键部署

  1. 确保服务器已安装 Docker 与 Docker Compose Plugin。
  2. 在项目根目录执行 docker compose up -d --build。
  3. 启动后可访问前端与后端服务,并通过 docker compose logs -f backend frontend 查看日志。
  4. 停止服务执行 docker compose down。

三、生产部署建议

  1. 替换所有默认口令与密钥(MySQL、MinIO、JWT、证书口令)。
  2. 收紧 CORS 允许域名,避免全开放策略。
  3. 挂载持久化卷保存数据库、对象存储与备份目录。
  4. 配置 HTTPS 证书并启用监控告警与定时备份。
  5. 如果部署在阿里云服务器且 Docker 拉取镜像较慢或超时,先配置 Docker 镜像加速器;仓库中提供了 docker/daemon.json.example 作为参考。

目录结构

项目核心目录如下:

  1. src/main/java/com/filesharing:后端业务代码。
  2. src/main/resources:后端配置文件与证书资源。
  3. src/test:后端测试代码。
  4. frontend:前端工程。
  5. docker/minio:MinIO 初始化脚本。
  6. scripts:辅助脚本与测试脚本。
  7. docker-compose.yml:整体容器编排入口。
  8. Dockerfile:后端镜像构建文件。

关键模块说明

1. 认证与安全模块

作用:保证系统访问安全,建立统一身份认证与权限校验机制。

  1. 认证方式采用 Spring Security + JWT,无状态会话便于前后端分离部署和横向扩展,也更适合多实例部署和容器化运行。
  2. 登录成功后签发令牌,后续请求由过滤器统一解析并注入用户身份,避免每次访问重复登录,同时降低服务端会话管理复杂度。
  3. 对公开接口、受保护接口和管理接口进行分层控制,确保文件读写、协作编辑、备份管理等高风险操作都要经过明确授权。
  4. 统一处理 CORS、异常响应和鉴权失败场景,前端能够拿到稳定且可识别的错误信息,减少前后端联调时的歧义。
  5. 该模块是其他业务模块的入口保障,任何文件读写、分享管理、协作编辑和运维接口都依赖该模块提供的用户上下文。
  6. 在实际请求链路中,认证不仅决定“谁可以访问”,也决定“可以访问哪些资源”和“以什么身份记录行为”,因此它是整个系统的安全基座。

2. 用户与个人空间模块

作用:管理用户基础信息和个人网盘空间边界,是所有业务数据的归属基础。

  1. 提供注册、登录、个人资料维护、头像或昵称更新、密码修改等用户生命周期能力,覆盖从创建账号到长期使用的主要操作。
  2. 为每个用户维护独立文件树和资源统计,确保不同用户数据天然隔离,避免文件归属混乱或跨用户可见。
  3. 用户空间不仅保存文件资源,也保存文件夹层级、收藏状态、删除状态、分享记录等关联数据,使个人空间具备完整状态。
  4. 在用户维度记录行为轨迹,为搜索排序、推荐计算和运营统计提供数据来源,也便于排查异常登录和异常访问。
  5. 与认证模块协同,确保用户操作可追踪、可审计,尤其是上传、删除、分享和恢复等敏感动作都能定位到具体操作者。
  6. 个人空间是“账户”与“文件资产”之间的桥梁:用户一旦登录,就会绑定到自己的资源空间,后续所有资源读写都在该边界内运行。

3. 文件服务与存储抽象模块

作用:负责文件从上传到下载的全流程处理,是系统的核心业务引擎。

  1. 文件上传阶段负责元数据校验、存储路径计算、重复文件检测和持久化记录,确保每个文件在进入系统前都经过基础治理。
  2. 文件下载阶段负责权限校验、资源定位和响应流输出,保证下载链路稳定,并避免直接暴露底层存储路径。
  3. 文件管理能力覆盖重命名、移动、复制、收藏、删除等高频操作,用户可以像管理本地文件一样管理云端资源。
  4. 提供统一存储抽象,支持本地磁盘与 MinIO 两种后端,实现存储介质可切换,便于适配不同部署环境。
  5. 通过业务层封装屏蔽底层差异,上层控制器无需关注具体存储实现,只需调用统一的文件服务接口即可完成业务动作。
  6. 该模块还负责维护数据库记录与实际文件对象的一致性,确保“元数据、权限状态、实际文件、回收站状态”同步变化。
  7. 如果从系统设计角度看,这一层就是文件生命周期的“中台”,上承用户与权限,下接存储与外部访问。

4. 分片上传与秒传模块

作用:提升大文件传输效率,降低网络抖动对上传体验的影响。

  1. 前端将大文件切片后并发上传,后端按分片索引接收并落盘到临时目录,降低单次请求压力。
  2. 支持断点续传,上传过程中如果网络中断或页面刷新,用户可以只补传缺失分片,而不必从头开始传输整个文件。
  3. 支持基于哈希的秒传机制,当目标文件的哈希值已经存在时,可以直接复用已有文件对象,显著减少重复上传时间。
  4. 文件分片完成后会执行合并和完整性校验,确保最终生成的文件与源文件一致,避免出现分片丢失或内容损坏。
  5. 该能力特别适合课程项目、资料包、视频、压缩包等大体积资源上传场景,在网络不稳定时仍能保持较好的用户体验。
  6. 分片临时目录、合并目录和最终存储目录之间是分阶段流转关系,这种设计便于做重试、清理和异常恢复。
  7. 从工程角度看,它把“高延迟、易失败的大文件上传”拆解成“可重试、可校验、可恢复”的小步骤,极大提升了可用性。

5. 分享与快传模块

作用:实现“受控共享”,让文件在系统内外安全流转。

  1. 支持创建分享链接、设置提取码、有效期和访问限制,用户可以按场景决定“谁能看、能看多久、能下载几次”。
  2. 支持一次性下载令牌,降低分享链接被重复滥用的风险,适合短期交付、临时审批和敏感内容传递。
  3. 快传功能覆盖文本快传与文件快传,既能快速发送一段临时文本,也能完成单文件的轻量分发。
  4. 分享链路中会记录访问和下载行为,便于后续统计分析、异常追踪和权限回溯,满足课程项目中常见的审计需求。
  5. 该模块在易用性与安全性之间做平衡:既让共享足够简单,又通过提取码、有效期和令牌把访问范围控制住。
  6. 在业务设计上,分享更偏“长期可访问的公开能力”,快传更偏“短时临时交付能力”,两者覆盖不同的协作需求。
  7. 通过这种受控共享机制,系统既能支持对外分享,也能避免资源链接无边界扩散。

6. 搜索与智能推荐模块

作用:提升文件检索效率和资源发现能力,减少用户查找成本。

  1. 提供关键词搜索、基础排序与结果筛选能力,用户可以从标题、标签、内容或历史记录中快速定位目标资源。
  2. 推荐模块根据用户行为、文件热度、时间衰减等特征生成候选结果,尽量把“可能有用”的内容推到用户面前。
  3. 通过策略组合输出“可能需要的文件”,提高常用资源命中率,减少用户反复搜索相同内容的成本。
  4. 关键实现位于 SmartRecommendationServiceImpl.java,便于在论文中说明推荐逻辑和代码入口。
  5. 该模块体现了从“被动查询”到“主动推荐”的体验升级,使系统不仅能存,还能帮用户找和发现资源。
  6. 搜索与推荐并不是两个完全独立的能力:搜索解决“我现在要找什么”,推荐解决“我可能还需要什么”。
  7. 当系统积累足够行为数据后,该模块还可以进一步扩展为更复杂的排序策略、标签推荐或资源聚合能力。

7. 实时协作模块

作用:支持多人同步编辑与互动,增强团队协同效率。

  1. 基于 WebSocket 建立长连接,实现低延迟消息广播,使多人协作时的变更能够尽快同步到其他客户端。
  2. 使用 Yjs 增量协同模式(Y.Doc/Y.Text),通过 update 直发直收实现 CRDT 自动合并,降低并发编辑冲突的处理复杂度。
  3. 支持协作项目、成员管理、文档编辑、评论交流等完整协作流程,适合课程小组、团队文档和项目资料协同。
  4. 通过会话与房间机制隔离协作上下文,避免消息串扰,确保不同文档、不同项目、不同房间之间互不影响。
  5. 通过初始同步握手与房间转发机制保障多端状态一致,使新加入成员能够快速获得当前文档状态。
  6. 该模块将传统网盘扩展为协同工作平台,是系统差异化亮点之一,也最能体现“文件平台不只是存储”的设计思路。
  7. 从实际使用体验看,它把“文件分享”进一步升级为“在线共同编辑和讨论”,让平台具备更明显的团队协作属性。

8. 回收站与数据生命周期模块

作用:降低误删风险,实现文件删除的可恢复管理。

  1. 删除操作默认进入回收站而非立即物理删除,提升容错能力,用户误删后仍有机会恢复资源。
  2. 支持手动恢复、批量恢复和彻底删除,满足“找回误删文件”和“永久清理无用文件”两类不同需求。
  3. 支持过期清理策略,平衡数据安全与存储成本,避免回收站长期堆积导致资源占用过高。
  4. 与文件服务模块协同,保证数据库记录与存储对象状态一致,防止出现回收站状态和真实文件状态不一致的问题。
  5. 回收站不仅是“删了之后找回来”的工具,也是整个文件生命周期管理的重要一环,可以帮助用户更稳妥地整理资源。
  6. 这个模块在教学场景里尤其重要,因为学生在整理资料、提交作业或批量移动文件时更容易产生误操作。

9. 备份恢复与运维模块

作用:保障数据安全与系统可维护性,是生产可用性的关键支撑。

  1. 支持全量备份与增量备份,覆盖数据库与文件资源,能够根据场景选择完整备份或仅备份变化内容。
  2. 支持备份校验、恢复和异步任务管理,便于在大数据量场景下执行维护操作,同时避免长时间阻塞主业务线程。
  3. 提供健康检查和关键指标输出,用于故障发现和容量评估,帮助管理员及时发现系统异常或资源瓶颈。
  4. 与 Docker 部署方案配合可实现定时备份与容灾演练,使系统具备更完整的生产运维思维。
  5. 该模块确保系统不仅“能用”,还具备持续运行与恢复能力,尤其适合强调可靠性和数据安全的项目展示。
  6. 备份恢复能力与回收站机制形成互补:前者解决“灾后恢复”,后者解决“误操作恢复”,共同构成数据保护闭环。
  7. 从架构角度看,这一模块让系统具备了基本的运维闭环,体现了从功能型项目向可维护系统的升级。

安全模块

本系统安全能力由“认证鉴权、接口防护、上传防护、访问控制、错误收敛”五部分组成,统一目标是降低未授权访问、恶意上传与信息泄露风险。

1. 身份认证与授权

  1. 基于 Spring Security + JWT 的无状态认证。
  2. 令牌中包含用户标识与角色信息,后端过滤器自动完成权限注入。
  3. 管理类接口按角色限制访问,避免普通用户越权调用。

2. 接口与会话防护

  1. CORS 使用白名单来源,避免全开放跨域。
  2. 启用 CSRF 防护,并仅对必要公共路径进行豁免。
  3. 支持全局与接口级限流,超阈值请求返回 429。

3. 文件上传安全

  1. 上传大小限制与后缀白名单校验。
  2. 禁止可执行与脚本类后缀(如 exe、jsp、sh、ps1 等)。
  3. 对文本类内容执行基础恶意脚本特征扫描。
  4. 分片上传链路增加 uploadId 格式校验与路径规范化,防止路径穿越。

4. 异常与信息暴露控制

  1. 统一异常处理,避免将内部堆栈和敏感细节直接返回前端。
  2. 关闭默认错误详情暴露,减少内部实现信息泄露。
  3. 日志级别按生产建议收敛,降低敏感数据输出风险。

5. 生产环境安全建议

  1. 必须替换默认账号口令和 JWT 密钥。
  2. 按实际域名配置 CORS 白名单与 HTTPS 证书。
  3. 对数据库、对象存储、后端管理端口启用网络访问隔离。
  4. 上线前执行一次接口权限与上传安全回归测试。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages