1. 项目概述:江理工文档管理系统的技术架构与核心功能
这个基于SpringBoot+Vue+MySQL的文档管理系统是我在江苏理工学院完成的毕业设计作品。作为一个完整的全栈项目,它实现了文档上传、分类管理、在线预览、权限控制等企业级文档管理核心功能。系统采用前后端分离架构,后端基于SpringBoot 2.7提供RESTful API,前端使用Vue 3组合式API开发,数据库选用MySQL 8.0作为持久化存储。
在实际开发过程中,我发现很多同学对如何将这三个技术栈有效整合缺乏经验。特别是SpringBoot与Vue的跨域问题、文件分块上传的实现、以及基于RBAC的权限控制方案,都是开发文档管理系统时需要重点攻克的技术难点。这个项目不仅提供了可运行的源码,还包含了详细的部署文档和毕业论文,可以作为类似项目的参考模板。
提示:系统完整源码已通过江苏理工学院毕业设计审核,所有敏感信息均已脱敏处理,可直接用于学习和二次开发。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与项目搭建
2.1 后端技术栈:SpringBoot的深度配置
后端采用SpringBoot 2.7.12版本,这是目前企业Java开发的主流选择。在pom.xml中需要特别注意以下核心依赖:
xml复制<!-- Web支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis Plus简化数据库操作 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<!-- 文件处理 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<!-- JWT认证 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
在application.yml中需要配置的关键项包括:
- 文件上传大小限制(默认1MB需要调整)
- MySQL连接池参数
- JWT令牌的过期时间和密钥
- 跨域访问的白名单设置
2.2 前端技术栈:Vue3的最佳实践
前端采用Vue 3.2 + Element Plus + Axios的技术组合。项目初始化时需要注意:
bash复制# 使用Vite创建项目
npm init vite@latest doc-manage-frontend --template vue
# 安装核心依赖
npm install element-plus axios vue-router pinia --save
在开发过程中,我总结了几点Vue3的最佳实践:
- 使用
<script setup>语法简化组件代码 - 通过Pinia进行状态管理替代Vuex
- 利用Composition API封装可复用的业务逻辑
- 对Axios进行二次封装,统一处理错误和加载状态
2.3 数据库设计:MySQL表结构优化
文档管理系统的核心表包括:
| 表名 | 主要字段 | 说明 |
|---|---|---|
| sys_user | id, username, password, salt, role_id | 用户表 |
| sys_role | id, name, permissions | 角色表 |
| doc_file | id, name, path, size, uploader_id | 文档主表 |
| doc_category | id, name, parent_id | 文档分类表 |
| doc_share | id, file_id, share_code, expire_time | 分享记录表 |
在MySQL性能优化方面,我采取了以下措施:
- 为频繁查询的字段创建索引
- 使用InnoDB引擎并合理设置字符集为utf8mb4
- 对大文本字段使用垂直分表
- 配置合理的连接池参数
3. 核心功能实现细节
3.1 文件上传与存储方案
文件上传是文档管理系统的核心功能。我实现了两种上传方式:
- 普通上传:适用于小文件
java复制@PostMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return R.error("请选择文件");
}
try {
String originalName = file.getOriginalFilename();
String filePath = "/upload/" + UUID.randomUUID() + originalName.substring(originalName.lastIndexOf("."));
File dest = new File(uploadPath + filePath);
FileUtils.copyInputStreamToFile(file.getInputStream(), dest);
// 保存到数据库...
return R.ok().put("path", filePath);
} catch (IOException e) {
log.error("文件上传失败", e);
return R.error("上传失败");
}
}
- 分块上传:针对大文件优化
- 前端使用File API将文件切片
- 后端使用临时目录存储分块
- 通过Redis记录上传进度
- 所有分块上传完成后合并文件
3.2 基于RBAC的权限控制
系统采用RBAC(基于角色的访问控制)模型,实现流程如下:
- 用户登录获取JWT令牌
- 前端路由根据权限动态生成
- 后端接口通过注解控制访问权限
java复制@PreAuthorize("hasRole('admin') || hasPermission('doc:delete')")
@DeleteMapping("/{id}")
public R delete(@PathVariable Long id) {
docService.removeById(id);
return R.ok();
}
权限数据存储在MySQL中,使用位运算高效检查权限:
sql复制-- 权限字段设计为bitmask
UPDATE sys_role SET permissions = permissions | 4 WHERE id = 1; -- 添加删除权限
3.3 文档在线预览实现
通过集成以下技术实现常见文档的在线预览:
- Office文档:使用LibreOffice转换为PDF
- PDF:pdf.js直接渲染
- 图片:直接展示
- 文本文件:代码高亮显示
关键代码片段:
javascript复制// 前端判断文件类型展示不同预览组件
const preview = () => {
const ext = file.name.split('.').pop().toLowerCase()
if (['jpg', 'png', 'gif'].includes(ext)) {
return <ImageViewer src={file.url} />
} else if (ext === 'pdf') {
return <PdfViewer url={file.url} />
}
// ...
}
4. 系统部署与运维方案
4.1 开发环境部署
- 后端启动:
bash复制# 安装依赖
mvn clean install
# 运行SpringBoot应用
mvn spring-boot:run -Dspring-boot.run.profiles=dev
- 前端启动:
bash复制npm install
npm run dev
4.2 生产环境部署
推荐使用Docker容器化部署,docker-compose.yml示例:
yaml复制version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: doc_db
volumes:
- ./mysql/data:/var/lib/mysql
ports:
- "3306:3306"
backend:
build: ./backend
ports:
- "8080:8080"
depends_on:
- mysql
environment:
SPRING_PROFILES_ACTIVE: prod
frontend:
build: ./frontend
ports:
- "80:80"
4.3 常见问题解决方案
- 跨域问题:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
}
- 文件上传大小限制:
yaml复制spring:
servlet:
multipart:
max-file-size: 50MB
max-request-size: 100MB
- MySQL连接池优化:
yaml复制spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
5. 毕业论文与技术文档撰写要点
作为毕业设计项目,完整的文档应包括以下部分:
- 需求分析:
- 功能需求(用例图)
- 非功能需求(性能、安全性等)
- 系统设计:
- 架构设计图
- 数据库ER图
- 核心类图
- 实现细节:
- 关键技术难点解决方案
- 核心算法描述
- 界面设计说明
- 测试方案:
- 单元测试覆盖率
- 接口测试用例
- 性能测试报告
- 部署手册:
- 环境要求
- 安装步骤
- 常见问题
在撰写技术文档时,我建议使用Markdown格式配合图表说明,可以使用PlantUML绘制各种设计图,保持文档与代码同步更新。
