Skip to content

1255985107/photorepo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PhotoRepo - 智能照片管理系统

一个功能完善的 B/S 架构照片管理系统,基于 React + Spring Boot + MySQL 构建,集成阿里云千问AI实现智能标签生成和自然语言搜索。

系统架构

功能特性

核心功能

  • 照片管理: 上传、删除、恢复、编辑
  • 用户认证: JWT令牌认证,安全可靠
  • 智能标签: EXIF自动提取 + AI内容识别
  • 高级搜索: 关键词、标签、日期多维度搜索
  • AI对话搜索: 自然语言照片检索
  • 轮播展示: 全屏轮播浏览照片
  • 垃圾桶: 软删除机制,支持恢复
  • 响应式设计: 完美适配桌面端和移动端

技术亮点

  • AI集成: 阿里云千问视觉模型(qwen-vl-plus)+ 文本模型(qwen-plus)
  • EXIF提取: 自动读取相机型号、拍摄参数、GPS位置等元数据
  • 多尺寸图片: 自动生成缩略图(300x300)和中等尺寸(1200x1200)
  • 实时同步: 前后端数据实时更新
  • 容器化部署: Docker Compose一键启动

技术栈

前端

  • React 18.2.0
  • Vite 5.0(构建工具)
  • React Router 6(路由管理)
  • Axios 1.6.0(HTTP客户端)
  • Nginx(生产环境)

后端

  • Java 17
  • Spring Boot 3.2.0
  • Spring Security + JWT
  • Spring Data JPA
  • MySQL 8.0
  • Apache Commons Imaging(EXIF提取)
  • Thumbnailator(图片处理)
  • 阿里云千问API

部署

  • Docker & Docker Compose
  • 多阶段构建优化镜像大小
  • Nginx反向代理

快速开始

环境要求

  • Docker 20.10+
  • Docker Compose V2
  • 至少2GB可用内存

1. 克隆项目

git clone https://github.com/yourusername/photorepo.git
cd photorepo

2. 配置环境变量

cp .env.example .env
# 编辑 .env 文件,配置必要的环境变量

必须配置的变量

  • MYSQL_ROOT_PASSWORD: 数据库root密码
  • JWT_SECRET: JWT密钥(至少32个字符)

可选配置

  • ALIYUN_API_KEY: 阿里云API密钥(用于AI功能)

3. 一键启动

./start.sh

或手动启动:

docker-compose up --build -d

访问地址

查看日志

# 查看所有服务日志
docker-compose logs -f

# 查看特定服务日志
docker-compose logs -f backend
docker-compose logs -f frontend
docker-compose logs -f mysql

停止服务

docker-compose down

# 同时删除数据卷(会清空数据库)
docker-compose down -v

开发模式

前端开发

cd frontend
npm install
npm run dev  # 访问 http://localhost:5173

后端开发

cd backend
mvn spring-boot:run  # 访问 http://localhost:8080

数据库初始化

数据库会在首次启动时自动执行 build.sql 初始化脚本。

默认测试账号:

  • 管理员: admin / 123456
  • 普通用户: testuser / 123456

项目结构

photorepo/
├── frontend/              # React 前端
│   ├── src/
│   │   ├── App.jsx       # 主组件
│   │   └── App.css       # 样式
│   ├── Dockerfile        # 前端镜像
│   └── nginx.conf        # Nginx 配置
├── backend/              # Spring Boot 后端
│   ├── src/main/java/com/photorepo/
│   │   ├── PhotoRepoApplication.java
│   │   ├── PhotoController.java
│   │   └── PhotoService.java
│   └── Dockerfile        # 后端镜像
├── build.sql             # 数据库建表脚本
├── docker-compose.yaml   # 容器编排
├── design_report.typ     # 设计文档
└── start.sh              # 启动脚本

API 接口

上传照片

POST /api/photos/upload
Content-Type: multipart/form-data

{
  "file": <binary>
}

响应:

{
  "success": true,
  "photoId": "550e8400-e29b-41d4-a716-446655440000",
  "message": "Photo uploaded successfully",
  "exifData": {
    "cameraMake": "Canon",
    "cameraModel": "Canon EOS 5D Mark IV",
    "dateTimeOriginal": "2024:12:14 15:30:45",
    "imageWidth": 6720,
    "imageHeight": 4480,
    "iso": "100",
    "aperture": "f/2.8",
    "shutterSpeed": "1/200s",
    "focalLength": "85.0mm",
    "lens": "EF 85mm f/1.8 USM",
    "latitude": 30.274084,
    "longitude": 120.155070
  }
}

EXIF 数据字段说明:

  • cameraMake: 相机制造商
  • cameraModel: 相机型号
  • dateTimeOriginal: 拍摄时间
  • imageWidth/imageHeight: 图片尺寸
  • iso: ISO感光度
  • aperture: 光圈值
  • shutterSpeed: 快门速度
  • focalLength: 焦距
  • lens: 镜头型号
  • latitude/longitude: GPS坐标(如有)

数据库表结构

详见 build.sql,包含:

  • users(用户表)
  • photos(照片表)
  • photo_metadata(元数据表)

功能实现状态

  • 用户注册和登录
  • JWT 认证中间件
  • EXIF 元数据提取
  • 照片与数据库集成
  • 标签管理
  • 搜索和查询
  • AI 智能分析(阿里云千问-VL API)
  • AI 对话搜索(网站内自然语言搜索)
  • 相册管理
  • 移动端响应式
  • 幻灯片播放

AI 功能说明

后端已集成阿里云千问-VL API,自动分析上传的照片并生成中文标签。AI 功能通过以下环境变量配置:

AI 生成的标签会自动添加 AI- 前缀,在前端用蓝色样式显示。

AI 对话搜索

网站内置 AI 对话窗口,用户可以用自然语言搜索照片:

  • 点击照片列表页的 "💬 AI 搜索" 按钮打开对话窗口
  • 输入自然语言查询,如:
    • "找出所有风景照片"
    • "显示昨天拍的照片"
    • "搜索包含人物的照片"
  • AI 理解意图后自动搜索并展示结果

工作原理

  1. 用户输入自然语言查询
  2. 阿里云千问分析意图,提取关键词、标签、日期等搜索参数
  3. 后端执行搜索,返回匹配的照片
  4. 对话窗口展示结果,可直接点击照片查看详情

详见 design/CHAT_SEARCH.md

文档

许可证

LICENSE

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors