droppy-2501网盘系统源码
Droppy 网盘项目分析
框架:CodeIgniter(PHP),程序本体为开源免费网盘 Droppy(Proxibolt 开发),本目录是一个二次开发/修改过的发行版(含数据库表前缀
droppy_、更新 SQLupdatev2.sql)。
一句话说明
这是一个自托管文件分享网盘。用户注册(邮箱验证)后上传文件,得到一个带提取码的下载链接;任何人(或注册后用户)输入提取码即可下载。站长负责后台管理:用户、上传文件、自定义页面、主题/背景、设置、广告位、插件、定时清理过期文件、系统更新。
技术栈
| 层 | 内容 |
|---|---|
| 语言/框架 | PHP + CodeIgniter(system/ 是 CI 框架核心) |
| 数据库 | MySQL(16 张表,前缀 droppy_,安装脚本在 application/install/droppy.sql) |
| 前端 | jQuery 3.6、Bootstrap、jquery.fileupload(大文件分块上传)、Vegas(旋转背景图)、Knob 滑块 |
| 手机适配 | Mobile_Detect 库 |
| 图片处理 | GD / Imagick / ImageMagick(生成缩略图) |
| 加密 | 文件可选 AES 加密存储(设置 encrypt_files) |
| 多语言 | 9 种:英、德、法、西、意、荷、捷、斯洛伐克、土(application/language/) |
模块清单
1. 安装模块
- 首次访问
/install走 5 步安装向导:检测环境 → 建库导入droppy.sql→ 建管理员账号 → 基础设置 → 完成。 - 关键文件:
application/controllers/Install.php、application/libraries/InstallLib.php、application/install/droppy.sql。
2. 前台首页与上传模块
- 用户访问首页(
/):未登录跳登录页,登录后看到上传页。 - 上传走 jquery.fileupload 分块协议:前端先
Upload::genid()拿会话 ID → 分块传Upload::register()→ 全部传完Upload::complete()落库(droppy_uploads生成upload_id+secret_code即提取码)。 - 图片自动出缩略图;开启加密设置时文件 AES 加密后才存盘。
- 关键文件:
application/controllers/Home.php、application/controllers/Upload.php、application/libraries/UploadHandler.php、application/libraries/CompleteHandler.php、application/views/themes/modern/upload.php。
3. 下载模块
- 分享链接形如
/page/xxx(404 路由统一指向Home::download),用户输入提取码 →Handler::password()校验 →Handler::download()流式输出文件;同时写入droppy_downloads做下载统计。 - 关键文件:
application/controllers/Handler.php、application/models/Files.php、application/models/Downloads.php。
4. 登录与用户模块
- 邮箱注册 + 邮件验证(
droppy_email_verify存待验证记录,Upload::verify_email完成验证),账号表droppy_accounts。 - 后台管理员账号体系独立(
droppy_users),与前台邮箱账号分开。 - 关键文件:
application/controllers/Login.php、application/libraries/AuthLib.php、application/libraries/Email.php(SMTP 发信)、application/models/Accounts.php、application/models/Emailverify.php、application/models/Users.php。
5. 后台管理模块(/admin)
application/controllers/Admin.php 一个控制器管理所有后台页:
| 子模块 | 功能 |
|---|---|
| 首页/系统 | 磁盘用量、系统状态、htaccess 检查、一键系统更新(UpdateLib 拉 Proxibolt 官方文件 + 跑 updatev2.sql) |
| 上传管理 | 查/删上传文件、导出上传记录(uploadsexport) |
| 下载管理 | 下载统计记录 |
| 用户管理 | 增删改管理员/用户账号 |
| 页面管理 | 自定义页面 CRUD(droppy_pages,前台 /page/名字 访问) |
| 背景 | 上传自定义轮播背景图 |
| 主题 | 启停/切换主题(droppy_themes) |
| 插件 | 加载/卸载插件管理页 |
| 设置 | 全站配置:站点名、文件大小/数量限制、文件过期时间、禁用文件类型、密码开关、SMTP 邮箱、条款、SEO、广告位(ad_1/ad_2)、购买码等,全部存 droppy_settings |
| 日志 | 操作日志(droppy_log) |
| 个人 | 管理员改自己账号/密码 |
视图在 application/views/admin/(15 个子页面 + settings 子目录),辅助逻辑在 application/libraries/AdminLib.php。
6. 定时任务模块
- URL
/cron(application/controllers/Cron.php),由站长用 crontab 定时调用,做六件事:- 标记过期上传为待删(按设置
expire天数) - 真正删除过期文件
- 清理
uploads/temp临时分块 - 执行各插件自定义 cron
- 删除过期下载统计等老数据
- 删除过期邮箱验证记录
- 标记过期上传为待删(按设置
- 逻辑全在
application/libraries/CronLib.php。
7. 插件模块
application/plugins/目录放插件(本发行版为空,只有 index.html 占位)。- 插件机制(
application/libraries/Plugin.php):每个插件是一个文件夹 +config.json,可注册自定义前台标签页、自定义 CSS、后台管理页、cron 任务。代码里还留有 premium 插件判断(pluginLoaded('premium')、callProxibolt),说明原版有付费扩展。
8. 辅助/公共模块
- 多语言系统:
application/models/Language.php+ 后台可管理语言包条目(droppy_templates存邮件/消息模板,按语言分存)。 - 社交图标:
droppy_social配 Facebook/Twitter/GitHub 等 8 个链接,页脚展示(application/models/Socials.php)。 - 轮播背景:
droppy_backgrounds+ Vegas.js,application/models/Backgrounds.php。 - 移动端识别:
application/libraries/Mobile_Detect.php,手机端切移动主题。 - Hook:
application/hooks/ConfigHook.php在请求早期加载配置。 - 会话:
droppy_sessions存 PHP 会话。
数据表一览(16 张)
| 表 | 用途 |
|---|---|
droppy_accounts |
前台注册用户(邮箱/密码/IP) |
droppy_email_verify |
邮箱验证 token |
droppy_users |
后台管理员账号 |
droppy_uploads |
上传批次(upload_id、secret_code、接收人邮箱) |
droppy_files |
具体文件记录(关联 upload_id,含大小/缩略图标记) |
droppy_downloads |
下载次数统计(IP/邮箱) |
droppy_receivers |
下载接收人 |
droppy_pages |
自定义页面 |
droppy_settings |
全站配置(单行存储) |
droppy_backgrounds |
轮播背景图 |
droppy_themes |
主题(modern/deprecated) |
droppy_templates |
多语言消息/邮件模板 |
droppy_social |
社交链接 |
droppy_language |
启用语言列表 |
droppy_log |
操作日志 |
droppy_sessions / droppy_updates |
会话 / 更新记录 |
文件/数据流向
用户上传分块 → uploads/temp/(暂存)
→ Upload::complete 合并入库 → 存正式位置(可加密、出缩略图)
→ 生成 download 链接(upload_id + secret_code)
定时任务 → 按 expire 天数标记过期 → 删文件 + 清临时分块
下载 → /page/{id} 输提取码 → 流式下载 → 写下载统计
后台 → Admin 控制器各页 → 改 settings/页面/背景/主题/用户
插件 → plugins/*/config.json → 注入自定义页签/CSS/后台页/cron
已知注意点
- 这是修改版 Droppy:
updatev2.sql和表结构与原版 Proxibolt Droppy 有差异(原版无droppy_receivers/droppy_sessions),AdminLib::callProxibolt仍保留官方更新通道,跑官方更新可能与本地改动冲突。 - 默认安装 SQL 里
droppy_settings的site_url等预置了 proxibolt.com,部署后需改。 - 后台更新功能从官方服务器拉文件,属于外部依赖;内网部署时该功能不可用。
- 文件默认存
uploads/目录(安装时可选upload_dir),uploads/temp放分块临时件。 - 代码里无 115/123/百度等第三方云盘 API 封装——这是纯本地存储网盘,不是云盘同步工具。
