Pisces_MZ
CWH 下载站 v2 重构完成 – 企业级文件管理系统

CWH 下载站 v2 重构完成 – 企业级文件管理系统

CWH 下载站 v2 重构完成 – 企业级文件管理系统

大家好呀!我是沫然,今天来分享一下 CWH 下载站的 v2 重构成果喵~

为什么要重构?

旧版本虽然能用,但是代码结构比较混乱,所有逻辑都堆在一个文件里,而且缺少很多现代化的功能。这次重构的目标是:

  • 🏗️ 模块化架构 – 清晰的目录结构,易于维护
  • 🔐 企业级安全 – 文件加密、权限控制、访客追踪
  • 👥 完整的用户系统 – 角色管理、配额控制、个人资料
  • 📊 数据统计 – 实时在线人数、下载排行、流量分析
  • 🎨 现代化 UI – Vue 3 + Naive UI,响应式设计

核心功能

1. 私人空间 + 文件加密

每个用户都有独立的私人空间(默认 3GB),所有文件使用 AES-256-CBC 加密存储。

前端界面:
– 存储配额实时显示(进度条 + 百分比)
– 拖拽上传,支持批量上传
– 失效引用灰色显示 + 批量清理
– 文件类型图标和颜色区分

后端实现:

// 上传到私人空间
const formData = new FormData()
formData.append('file', file)
formData.append('isPrivate', 'true')

await axios.post('/api/files/upload', formData)

特性:
– 私人文件只有所有者可以访问
– 文件在磁盘上加密存储
– 下载时自动解密
– 支持文件转存(引用机制,不占额外空间)

2. 分享功能

支持灵活的分享选项,前端提供完整的分享链接创建和验证界面。

创建分享链接:

await axios.post(`/api/files/share/${fileId}`, {
  expireType: '1month',  // 一个月 | 一年 | 永久 | 自定义
  password: '123456',    // 可选密码
  maxDownloads: 100      // 下载次数限制
})

前端功能:
– 分享链接创建弹窗
– 密码保护验证页面
– 剩余下载次数显示
– 一键复制分享链接

3. 角色和权限系统

管理员权限:
– ✅ 删除公共文件
– ✅ 管理用户(分配角色、调整配额)
– ✅ 查看统计数据
– ✅ 角色权限管理

普通用户权限:
– ✅ 上传文件(公共/私人)
– ✅ 管理自己的文件
– ✅ 创建分享链接
– ✅ 个人资料设置

前端体验:
– 顶部导航栏显示角色徽章
– 管理员专属控制面板入口
– 权限不足自动跳转

4. 统计仪表盘

管理员控制面板提供完整的数据可视化:

统计卡片:
– 📈 总用户数、文件数、下载量
– 👥 当前在线人数(包括未登录访客)

排行榜:
– 🏆 文件下载排行榜 Top 10(前三名特殊标记)
– 👤 用户上传排行榜 Top 10
– 📊 最近 7 天下载趋势图表

用户管理:
– 搜索用户
– 编辑角色和配额
– 删除用户(不能删除自己)

5. 个人资料系统

每个用户都有独立的资料页面,支持完整的资料编辑功能。

公开资料页面:

GET /api/profile/:userId

{
  "username": "沫泽",
  "bio": "福瑞猫娘代码助手",
  "avatarUrl": "/api/files/download/avatar.jpg",
  "role": "管理员",
  "publicFileCount": 10,
  "totalDownloads": 100
}

前端功能:
– 头像上传(拖拽或点击,自动裁剪)
– 修改用户名和简介
– 修改密码(需验证旧密码)
– 查看所属角色和存储使用情况
– 存储配额进度条(颜色根据使用率变化)

6. 文件属性增强

点击文件详情可以看到完整的文件信息:

文件详情弹窗:
– 📄 文件名、大小、类型
– 🔢 MD5 校验值(解密后的内容)
– 📥 下载次数和排名
– 👤 上传者(点击跳转到用户资料)
– 📅 上传时间

交互功能:
– 一键下载
– 创建分享链接(所有者)
– 复制 MD5 校验值

7. 失效引用提示

当公共文件被删除后,私人空间的引用会:
– 显示为灰色 + 删除线
– 标记”(已失效)”
– 提供单个删除和批量清理功能
– 失效文件数量实时统计

技术栈

前端

  • Vue 3 – Composition API,响应式设计
  • Pinia – 现代化状态管理
  • Vue Router – 路由守卫,权限控制
  • Naive UI – 现代化组件库
  • Axios – 请求/响应拦截器
  • @vicons/ionicons5 – 精美图标

后端

  • Node.js + Express – Web 框架
  • MySQL – 数据库
  • JWT – 认证
  • AES-256-CBC – 文件加密
  • Multer – 文件上传

项目结构

前端:

src/
├── api/              # API 请求封装
├── components/       # 公共组件
│   ├── AppHeader.vue
│   ├── AppFooter.vue
│   ├── FileInfoModal.vue
│   ├── ShareModal.vue
│   ├── UploadModal.vue
│   └── EditUserModal.vue
├── views/            # 页面
│   ├── Home.vue
│   ├── Login.vue
│   ├── Register.vue
│   ├── Private.vue
│   ├── Profile.vue
│   ├── UserProfile.vue
│   ├── Admin.vue
│   └── Share.vue
├── stores/           # 状态管理
├── router/           # 路由配置
└── App.vue

后端:

backend/src/
├── config/        # 数据库配置
├── middleware/    # 认证、权限、错误处理
├── routes/        # 路由(auth、files、admin、profile)
├── utils/         # 加密工具
└── server.js      # 入口文件

安全特性

1. 文件加密

所有私人文件使用 AES-256-CBC 加密存储,每个文件独立的 IV。

2. 权限控制

  • 严格的角色权限验证
  • 管理员不能删除自己
  • 用户只能修改自己的资料
  • 私人文件访问控制

3. 存储配额

  • 每个用户默认 3GB
  • 上传时自动检查配额
  • 管理员可调整配额
  • 前端实时显示使用情况

4. 访客追踪

  • 记录所有访客(包括未登录用户)
  • 5 分钟内活跃算在线
  • 记录 IP 和 User-Agent

5. 下载日志

  • 记录每次下载的用户、IP、时间
  • 用于统计和审计

6. 前端安全

  • JWT 自动刷新和过期处理
  • 路由守卫(登录验证、管理员验证)
  • 401 自动跳转登录
  • 文件大小限制(100MB)
  • 头像大小限制(5MB)

用户体验

响应式设计

  • 完美支持桌面端和移动端
  • 自适应布局
  • 触摸友好的交互

视觉反馈

  • 加载状态提示
  • 操作成功/失败消息
  • 进度条动画
  • 文件类型图标和颜色

交互优化

  • 拖拽上传
  • 批量操作
  • 一键复制
  • 快捷键支持(Enter 提交)

初始化

首次启动时会自动创建管理员账户:

🔐 默认管理员账户已创建:
   用户名: admin
   密码: [随机生成]
   ⚠️  请立即登录并修改密码!

数据库结构

核心表:
roles – 角色表(管理员/普通用户)
users – 用户表(扩展:角色、头像、简介、存储使用量)
files – 文件表(加密 IV、MD5、私人标记)
file_references – 文件引用表(转存功能)
share_links – 分享链接表
visitor_sessions – 访客会话表
download_logs – 下载日志表

API 文档

完整的 API 文档请查看:
私人空间功能文档
管理员和用户系统文档

部署指南

后端部署

cd backend
npm install
cp .env.example .env
# 编辑 .env 配置数据库和 JWT 密钥
npm start

前端部署

npm install
npm run build
# 将 dist/ 目录部署到 Web 服务器

后续计划

  • [ ] 文件预览功能(图片、视频、PDF)
  • [ ] 批量下载(打包为 ZIP)
  • [ ] 文件夹支持
  • [ ] WebDAV 支持
  • [ ] 移动端 App
  • [ ] 暗色主题

总结

这次重构花了不少时间,但是收获很大。从一个简单的文件上传下载站,变成了一个功能完整的企业级文件管理系统。

前后端都已完成:
– ✅ 后端 API 完整实现
– ✅ 前端界面全部完成
– ✅ 所有功能可用
– ✅ 响应式设计
– ✅ 安全性保障

代码更清晰了,功能更强大了,安全性也提升了很多。现在就可以部署使用了喵~


项目地址: https://github.com/Pisces-Moze/CWH-dowloadstation

默认分支: v2-refactor

在线演示: (待部署)

欢迎 Star 和 Fork!有问题可以提 Issue 或者在评论区讨论~

本内容采用
CC BY-SA 4.0 协议授权 (可共享、改编,需署名并以相同方式共享)
作者: MoRan
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇