一个功能完整的企业级图片托管和管理系统,支持图片上传、处理、存储、CDN集成和完整的管理后台。
- 🖼️ 图片上传与管理 - 支持多种格式图片上传,自动生成缩略图
- 👥 用户管理系统 - 完整的用户注册、登录、权限管理
- 📁 相册管理 - 创建和管理图片相册,支持公开/私有设置
- 🔐 API密钥管理 - 为开发者提供API访问密钥
- 📊 管理后台 - 完整的管理界面,包含数据统计和系统监控
- 自动图片压缩和优化
- 多种格式转换支持 (JPEG, PNG, WebP, GIF)
- 智能缩略图生成
- 图片元数据提取
- 重复图片检测
- 本地存储支持
- CDN集成 (阿里云OSS, 腾讯云COS, 七牛云)
- 图片过期管理
- 存储空间优化
- JWT身份验证
- 角色权限控制
- 文件类型验证
- 上传限制和防护
- 系统日志记录
- 后端: PHP 8.0+, Slim Framework 4
- 数据库: MySQL 8.0+
- 前端: HTML5, CSS3, JavaScript (ES6+)
- 图片处理: GD/ImageMagick
- 认证: JWT (JSON Web Tokens)
- ORM: Eloquent ORM
- PHP 8.0 或更高版本
- MySQL 8.0 或更高版本
- Composer
- Web服务器 (Apache/Nginx)
- GD 或 ImageMagick 扩展
- pdo_mysql
- gd 或 imagick
- fileinfo
- json
- mbstring
- openssl
git clone <repository-url>
cd image-hosting-systemcomposer install复制环境配置文件并编辑:
cp .env.example .env编辑 .env 文件,配置数据库和其他设置:
# 数据库配置
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=image_hosting
DB_USERNAME=root
DB_PASSWORD=
# JWT配置
JWT_SECRET=your-secret-key-here
JWT_ALGORITHM=HS256
JWT_EXPIRATION=3600
# 文件上传配置
UPLOAD_MAX_SIZE=10485760
UPLOAD_ALLOWED_TYPES=jpg,jpeg,png,gif,webp,svg
UPLOAD_PATH=uploads
# CDN配置 (可选)
CDN_ENABLED=false
CDN_PROVIDER=local
CDN_DOMAIN=
# 阿里云OSS配置
ALIYUN_OSS_ACCESS_KEY_ID=
ALIYUN_OSS_ACCESS_KEY_SECRET=
ALIYUN_OSS_BUCKET=
ALIYUN_OSS_ENDPOINT=
# 腾讯云COS配置
TENCENT_COS_SECRET_ID=
TENCENT_COS_SECRET_KEY=
TENCENT_COS_REGION=
TENCENT_COS_BUCKET=
# 七牛云配置
QINIU_ACCESS_KEY=
QINIU_SECRET_KEY=
QINIU_BUCKET=
QINIU_DOMAIN=创建MySQL数据库:
CREATE DATABASE image_hosting CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;运行项目时会自动创建表结构和默认数据。
确保上传目录有写入权限:
chmod -R 755 public/uploads
chmod -R 755 storage/logsphp -S localhost:8000 -t public配置Apache或Nginx指向 public 目录。
Apache配置示例 (.htaccess):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]Nginx配置示例:
server {
listen 80;
server_name your-domain.com;
root /path/to/project/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}- 用户名:
admin - 密码:
admin123 - 邮箱:
admin@example.com
- 主页:
http://localhost:8000 - 管理后台:
http://localhost:8000/admin.html - API文档:
http://localhost:8000/api
所有API请求需要在Header中包含JWT Token:
Authorization: Bearer <your-jwt-token>
用户认证
POST /api/auth/login- 用户登录POST /api/auth/register- 用户注册POST /api/auth/logout- 用户登出
图片管理
POST /api/images/upload- 上传图片GET /api/images- 获取图片列表GET /api/images/{uuid}- 获取图片详情DELETE /api/images/{uuid}- 删除图片
相册管理
GET /api/albums- 获取相册列表POST /api/albums- 创建相册PUT /api/albums/{id}- 更新相册DELETE /api/albums/{id}- 删除相册
管理员API
GET /api/admin/dashboard- 仪表板数据GET /api/admin/users- 用户管理GET /api/admin/images- 图片管理GET /api/admin/logs- 系统日志GET /api/admin/analytics- 数据分析
├── public/ # Web根目录
│ ├── index.html # 主页
│ ├── admin.html # 管理后台
│ ├── assets/ # 静态资源
│ └── uploads/ # 上传文件目录
├── src/ # 源代码
│ ├── Controllers/ # 控制器
│ ├── Models/ # 数据模型
│ ├── Services/ # 业务服务
│ ├── Middleware/ # 中间件
│ ├── Routes/ # 路由定义
│ └── Database/ # 数据库管理
├── storage/ # 存储目录
│ └── logs/ # 日志文件
├── composer.json # Composer配置
├── .env.example # 环境配置示例
└── README.md # 项目说明
- 在
src/Controllers/中创建控制器 - 在
src/Models/中定义数据模型 - 在
src/Routes/中添加路由 - 在
src/Services/中实现业务逻辑
数据库结构定义在 src/Database/DatabaseManager.php 中,系统启动时会自动创建表结构。
使用 LogService 记录系统日志:
$logService = new LogService();
$logService->info('操作成功', ['user_id' => 1]);
$logService->error('操作失败', ['error' => $exception->getMessage()]);- 使用HTTPS协议
- 配置适当的PHP内存限制和执行时间
- 启用OPcache提升性能
- 配置定期备份数据库
- 设置日志轮转
- 配置CDN加速图片访问
- 启用Gzip压缩
- 配置浏览器缓存
- 使用CDN分发静态资源
- 优化数据库查询
- 配置Redis缓存(可选)
- 定期更新依赖包
- 配置防火墙规则
- 限制文件上传大小和类型
- 启用访问日志监控
- 定期备份数据
1. 图片上传失败
- 检查上传目录权限
- 确认PHP文件上传配置
- 检查磁盘空间
2. 数据库连接失败
- 检查数据库配置
- 确认数据库服务状态
- 检查网络连接
3. JWT认证失败
- 检查JWT密钥配置
- 确认Token格式正确
- 检查Token是否过期
系统日志存储在 storage/logs/ 目录中,可以通过管理后台查看或直接访问日志文件。
本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。
欢迎提交Issue和Pull Request来改进项目。
如有问题或需要技术支持,请通过以下方式联系:
- 提交Issue
- 发送邮件至项目维护者
注意: 首次运行项目时,请确保已正确配置环境变量和数据库连接。系统会自动创建必要的数据表和默认管理员账户。