# 个人资料库 (Personal Resource Library) 基于 Flask + MySQL 的个人多媒体资料管理系统。支持文本、图片、音频、视频的上传、URL 下载、磁力下载及在线预览。 ## 功能特性 | 功能 | 说明 | |------|------| | 权限管理 | 管理员 / 普通用户两级权限,登录保护所有页面 | | 资源管理 | 文本、图片、音频、视频四类资源 | | 本地上传 | 拖拽或点击上传,带实时进度条 | | URL 下载 | 后台异步下载远程文件,实时轮询进度 | | 磁力下载 | 调用 aria2c 在后台下载磁力链接资源 | | 在线预览 | 文本高亮/图片查看/HTML5 音视频播放器 | | 安全 | bcrypt 加盐哈希密码、CSRF 防护、SQL 注入防护、XSS 防护 | ## 快速开始 ### 1. 环境准备 - Python 3.10+ - MySQL 8.0+ - (可选)[aria2c](https://aria2.github.io/) — 用于磁力下载 ### 2. 安装依赖 ```bash pip install -r requirements.txt ``` ### 3. 配置数据库 创建 MySQL 数据库: ```sql CREATE DATABASE resource_library CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 复制并修改环境配置: ```bash cp .env.example .env ``` 编辑 `.env`: ```env SECRET_KEY=your-random-secret-key DATABASE_URL=mysql+pymysql://root:yourpassword@localhost:3306/resource_library ``` ### 4. 初始化数据库 ```bash python init_db.py # 自定义管理员账号: # python init_db.py --admin-user admin --admin-pass YourPass123 --admin-email admin@example.com ``` ### 5. 启动服务 ```bash python run.py ``` 访问 `http://localhost:5000`,使用默认管理员账号登录: - 用户名:`admin` - 密码:`Admin@123456` ## 项目结构 ``` . ├── app/ │ ├── models/ # 数据库模型 (User, Resource, SystemSetting) │ ├── routes/ # 路由蓝图 (auth, admin, resources, main) │ ├── utils/ # 工具模块 (decorators, file_handler, downloader) │ ├── static/ # 静态文件 (CSS, JS, 上传文件) │ │ └── uploads/ # 用户上传文件目录(自动创建) │ └── templates/ # Jinja2 模板 ├── config.py # 配置类 ├── init_db.py # 数据库初始化脚本 ├── run.py # 启动入口 └── requirements.txt ``` ## 安全设计 | 安全措施 | 实现方式 | |----------|----------| | 密码存储 | Flask-Bcrypt(bcrypt 自动加盐哈希) | | CSRF 防护 | Flask-WTF CSRFProtect,所有 POST 请求验证 token | | 权限控制 | Flask-Login `@login_required` + 自定义 `@admin_required` | | SQL 注入 | SQLAlchemy ORM 参数化查询 | | XSS 防护 | Jinja2 自动转义 HTML 输出 | | 文件安全 | `werkzeug.secure_filename` + 扩展名白名单验证 | | Session | HTTPOnly Cookie + SameSite=Lax | ## 磁力下载说明 磁力下载需要在服务器上安装 `aria2c`: - **Linux/macOS**:`apt install aria2` / `brew install aria2` - **Windows**:从 [aria2 Releases](https://github.com/aria2/aria2/releases) 下载并加入 PATH