📷图床系统详细架构图
╔══════════════════════════════════════════╗
║ 用户浏览器(前端) ║
║ Vue3 + PrimeVue ║
╚══════════════════════════════════════════╝
│
▼
╔══════════════════════════════════════════╗
║ Nginx ║
║ - 反向代理 ║
║ - 防盗链(Referer校验、URL签名验证) ║
║ - HTTPS处理 ║
╚══════════════════════════════════════════╝
│
▼
╔══════════════════════════════════════════╗
║ PHP 后端 (ThinkPHP8 框架) ║
║ - API接口层 ║
║ - 认证(OAuth2 + JWT签发) ║
║ - 上传处理(把上传任务发送到Kafka) ║
║ - 图片查看、列表、管理 ║
║ - 权限控制(用户组权限) ║
║ - 动态生成签名防盗链地址 ║
╚══════════════════════════════════════════╝
│
┌───────┴────────────────────────────┐
│ │
▼ ▼
╔════════════════════╗ ╔════════════════════════════════╗
║ Redis ║ ║ Kafka集群 ║
║ - 缓存Session/Token ║ ║ - 异步任务(图片处理流程) ║
╚════════════════════╝ ╚════════════════════════════════╝
│
▼
╔══════════════════════════════════════════════════════════════════════╗
║ Kafka 消费者 Worker(异步图片处理) ║
║ - 图片压缩(支持多种压缩策略) ║
║ - 图片格式转换(WebP / AVIF) ║
║ - 动态水印添加 ║
║ - 图片审核(调用审核API,如阿里云/腾讯云审核API) ║
║ - 存储到对象存储(OSS/S3/本地存储) ║
║ - 删除临时文件 ║
╚══════════════════════════════════════════════════════════════════════╝
│
┌───────────────────────────┼────────────────────────────┐
│ │ │
▼ ▼ ▼
╔════════════════════╗ ╔════════════════════╗ ╔═════════════════════════════════════╗
║ 对象存储 OSS/S3/本地 ║ ║ PostgreSQL数据库 ║ ║ 第三方审核API接口 (可配置多个) ║
║ - 存储图片文件 ║ ║ - 用户、图片、相册表 ║ ║ - 腾讯云 / 阿里云内容安全API等 ║
║ - 多存储策略选择 ║ ║ - 压缩策略、存储策略表║ ║ - 可灵活切换、设置多个审核通道 ║
╚════════════════════╝ ╚════════════════════╝ ╚═════════════════════════════════════╝
📷系统详细模块划分图
╔════════════════════════════════════════════════════════════════════════════════╗
║ 用户浏览器(Vue3 + PrimeVue) ║
║ - 登录/注册 ║
║ - 相册浏览 ║
║ - 图片上传 ║
║ - 图片广场 ║
║ - 用户中心(个人资料、设置、空间查看) ║
║ - 后台管理入口(管理员/运营专用) ║
╚════════════════════════════════════════════════════════════════════════════════╝
│
▼
╔════════════════════════════════════════════════════════════════════════════════╗
║ Nginx(网关层) ║
║ - HTTPS(SSL证书) ║
║ - 反向代理到 PHP ║
║ - 防盗链 Referer 校验 ║
║ - URL签名校验(动态防盗链链接生成) ║
║ - 限流、拦截、IP白名单黑名单 ║
╚════════════════════════════════════════════════════════════════════════════════╝
│
▼
╔════════════════════════════════════════════════════════════════════════════════╗
║ ThinkPHP 8 应用(API层) ║
║ 【认证模块】 ║
║ - OAuth2 授权流程 ║
║ - JWT签发与验证 ║
║ - Token刷新机制 ║
║ ║
║ 【用户模块】 ║
║ - 用户注册/登录 ║
║ - 用户信息修改 ║
║ - 空间使用情况统计 ║
║ - 用户组权限绑定 ║
║ ║
║ 【用户组管理模块】 ║
║ - 用户组权限配置 ║
║ - 上传限制、审核要求、压缩策略限制 ║
║ ║
║ 【相册模块】 ║
║ - 多级相册目录 ║
║ - 图片移动/重命名/删除 ║
║ ║
║ 【上传模块】 ║
║ - 上传文件初步校验(大小、格式) ║
║ - 暂存临时目录 ║
║ - 投递Kafka消息(图片处理) ║
║ ║
║ 【图片管理模块】 ║
║ - 图片列表、缩略图展示 ║
║ - 图片压缩记录、审核状态 ║
║ - 水印动态生成配置 ║
║ ║
║ 【策略配置模块】 ║
║ - 压缩策略定义 ║
║ - 存储策略切换 ║
║ - 防盗链策略设置 ║
╚════════════════════════════════════════════════════════════════════════════════╝
│
┌────────────────────────────┼────────────────────────────┐
▼ ▼ ▼
╔══════════════════════════╗ ╔══════════════════════════╗ ╔════════════════════════════════╗
║ Redis ║ ║ Kafka ║ ║ Prometheus+Grafana ║
║ - Token存储 ║ ║ - 图片处理任务异步推送 ║ ║ - 性能监控+报警 ║
║ - 用户缓存、频率控制 ║ ║ - 审核回调任务推送 ║ ║ - 资源使用率监控 ║
║ - 接口防刷 ║ ║ - 大图转码任务推送 ║ ║ - 数据库性能监控 ║
╚══════════════════════════╝ ╚══════════════════════════╝ ╚════════════════════════════════╝
│
▼
╔════════════════════════════════════════════════════════════════════════════════╗
║ Kafka消费者Worker (异步后台) ║
║ 【图片压缩子模块】 ║
║ - 按压缩策略压缩JPEG/PNG ║
║ - 输出WebP/AVIF格式 ║
║ ║
║ 【水印添加子模块】 ║
║ - 动态文字水印 ║
║ - 图片水印 ║
║ ║
║ 【审核处理子模块】 ║
║ - 调用内容审核API(腾讯、阿里、华为等) ║
║ - 根据审核结果标记图片 ║
║ ║
║ 【存储处理子模块】 ║
║ - 自动存到OSS/S3 ║
║ - 或本地磁盘存储 ║
╚════════════════════════════════════════════════════════════════════════════════╝
│
┌────────────────────────────┬────────────────────────────┐
▼ ▼ ▼
╔══════════════════════════╗ ╔══════════════════════════╗ ╔══════════════════════════╗
║ OSS/S3 存储 ║ ║ PostgreSQL 数据库 ║ ║ 审核API服务 (可换) ║
║ - 文件存储 ║ ║ - 用户/图片/审核表 ║ ║ - 腾讯/阿里/华为/自定义审核 ║
║ - CDN加速接入(可选) ║ ║ - 压缩策略/存储策略表 ║ ║ - API密钥配置 ║
╚══════════════════════════╝ ╚══════════════════════════╝ ╚══════════════════════════╝
评论区