# da_picture **Repository Path**: darling_da/da_picture ## Basic Information - **Project Name**: da_picture - **Description**: 达零云图库:基于 Vue 3 + Spring Boot + COS + WebSocket 的 企业级智能协同云图库平台。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: backend - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-21 - **Last Updated**: 2026-03-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # da_picture 后端服务 ## 项目简介 da_picture 是一个功能完整的图片管理平台后端服务,基于 Spring Boot 2.7.6 开发。支持用户管理、图片上传与审核、私有空间管理、以图搜图、按主色调搜图等核心功能,并集成腾讯云 COS 对象存储和 Redis 分布式 Session。 ## 技术栈 | 分类 | 技术 | 版本 | |------|------|------| | 核心框架 | Spring Boot | 2.7.6 | | 运行环境 | JDK | 1.8 | | ORM 框架 | MyBatis-Plus | 3.5.9 | | 数据库 | MySQL | 8.x | | 缓存 | Redis + Caffeine(本地双缓存)| — | | Session 持久化 | Spring Session Data Redis | — | | 对象存储 | 腾讯云 COS SDK | 5.6.227 | | HTML 解析 | Jsoup | 1.15.3 | | 接口文档 | Knife4j (OpenAPI2) | 4.4.0 | | 工具库 | Hutool-All | 5.8.26 | | 权限控制 | Spring AOP + 自定义注解 | — | ## 主要功能 - **用户管理**:注册、登录、注销、头像上传、个人信息修改、密码重置(管理员) - **图片管理**:文件/URL 上传、批量爬取、图片审核(通过/拒绝)、删除、编辑、批量编辑 - **空间管理**:创建私有空间(普通/专业/旗舰三级)、空间容量配额控制 - **智能搜索**:以图搜图(调用外部图搜 API)、按主色调搜图(HSV 色彩相似度算法) - **高性能缓存**:Caffeine 本地缓存 + Redis 分布式缓存双层架构 - **权限控制**:基于 AOP 的 `@AuthCheck` 注解鉴权(普通用户/管理员) - **文件存储**:上传时自动转 WebP 格式并生成 256×256 缩略图 ## 项目结构 ``` src/main/java/com/darling/danotebackend/ ├── controller/ # 接口层(5 个 Controller) ├── service/ # 业务接口 + impl/ 实现 ├── manager/ # 核心管理器 │ ├── CosManager # COS 对象存储操作 │ └── upload/ # 图片上传模板方法(抽象类 + 2 个子类) ├── model/ │ ├── entity/ # 数据库实体(User / Picture / Space) │ ├── dto/ # 请求 DTO、VO、搜图结果等 │ └── enums/ # 枚举(用户角色 / 图片审核状态 / 空间级别) ├── config/ # 配置类(跨域 / COS / MyBatis-Plus / Jackson) ├── aop/ # 权限拦截切面 ├── annotation/ # @AuthCheck 自定义注解 ├── api/imagesearch/ # 以图搜图外部 API 封装(门面模式) ├── mapper/ # MyBatis-Plus Mapper ├── exception/ # 业务异常 + 全局异常处理器 ├── common/ # 统一响应体、工具类 ├── constant/ # 常量定义 └── utils/ # 颜色计算工具 ``` ## 接口文档 > 全局路径前缀:`/api`,服务端口:`9090` > > 启动后访问 Knife4j 在线文档:`http://localhost:9090/api/doc.html` ### 通用接口 | 方法 | 路径 | 权限 | 说明 | |------|------|------|------| | GET | `/health` | 公开 | 健康检查 | ### 用户接口 `/user` | 方法 | 路径 | 权限 | 说明 | |------|------|------|------| | POST | `/user/register` | 公开 | 用户注册(账号 4-16 位,密码 8-16 位)| | POST | `/user/login` | 公开 | 用户登录 | | POST | `/user/logout` | 登录用户 | 用户注销 | | GET | `/user/get/login` | 登录用户 | 获取当前登录用户信息 | | POST | `/user/avatar` | 登录用户 | 上传用户头像 | | POST | `/user/info` | 登录用户 | 修改个人信息 | | GET | `/user/get/vo` | 公开 | 根据 ID 获取用户脱敏信息 | | POST | `/user/add` | 管理员 | 创建用户(默认密码 12345678)| | GET | `/user/get` | 管理员 | 根据 ID 获取用户原始信息 | | POST | `/user/delete` | 管理员 | 删除用户 | | POST | `/user/update` | 管理员 | 更新用户信息 | | POST | `/user/reset/password` | 管理员 | 重置用户密码 | | POST | `/user/list/page/vo` | 管理员 | 分页查询用户列表(脱敏)| ### 图片接口 `/picture` | 方法 | 路径 | 权限 | 说明 | |------|------|------|------| | POST | `/picture/upload` | 登录用户 | 本地文件上传图片(≤2MB,支持 jpg/png/webp)| | POST | `/picture/upload/url` | 登录用户 | URL 方式上传图片 | | POST | `/picture/upload/batch` | 管理员 | 批量爬取网络图片 | | POST | `/picture/delete` | 登录用户 | 删除图片(同步清理 COS 文件)| | POST | `/picture/edit` | 登录用户 | 编辑图片信息 | | POST | `/picture/edit/batch` | 登录用户 | 批量编辑图片(分类/标签)| | POST | `/picture/update` | 管理员 | 更新图片信息 | | POST | `/picture/review` | 管理员 | 图片审核(通过/拒绝)| | GET | `/picture/get` | 管理员 | 根据 ID 获取图片原始数据 | | GET | `/picture/get/vo` | 公开/空间鉴权 | 根据 ID 获取图片 VO | | POST | `/picture/list/page/vo/cache` | 公开 | 分页查询图片(双缓存加速)| | POST | `/picture/list/page/vo` | 公开 | 分页查询图片(无缓存)| | POST | `/picture/list/page` | 管理员 | 分页查询图片原始数据 | | GET | `/picture/tag_category` | 公开 | 获取预设标签和分类列表 | | POST | `/picture/search/picture` | 公开 | 以图搜图 | | POST | `/picture/search/color` | 登录用户 | 按主色调搜图 | ### 空间接口 `/space` | 方法 | 路径 | 权限 | 说明 | |------|------|------|------| | POST | `/space/add` | 登录用户 | 创建私有空间(互斥锁防并发)| | POST | `/space/delete` | 本人/管理员 | 删除空间 | | POST | `/space/edit` | 本人/管理员 | 编辑空间(用户端)| | POST | `/space/update` | 管理员 | 更新空间信息 | | GET | `/space/get` | 管理员 | 根据 ID 获取空间原始数据 | | GET | `/space/get/vo` | 公开 | 根据 ID 获取空间 VO | | POST | `/space/list/page` | 管理员 | 分页查询空间列表(原始数据)| | POST | `/space/list/page/vo` | 公开 | 分页查询空间列表(VO)| | GET | `/space/list/level` | 公开 | 获取空间级别枚举列表 | ### 文件接口 `/file`(测试用) | 方法 | 路径 | 权限 | 说明 | |------|------|------|------| | POST | `/file/test/upload` | 管理员 | 测试上传文件到 COS | | GET | `/file/test/download/` | 管理员 | 测试从 COS 下载文件 | ## 数据模型 ### 空间级别配额 | 级别 | 名称 | 最大图片数 | 最大总大小 | |------|------|-----------|-----------| | 0 | 普通版 | 50 张 | 100 MB | | 1 | 专业版 | 100 张 | 1 GB | | 2 | 旗舰版 | 1000 张 | 10 GB | ### 图片审核状态 | 状态值 | 含义 | |--------|------| | 0 | 待审核 | | 1 | 审核通过 | | 2 | 审核拒绝 | ## 如何运行 ### 环境准备 1. JDK 1.8+ 2. Maven 3.6+ 3. MySQL 8.x(建库并执行 `sql/` 目录下的 SQL 文件) 4. Redis(用于 Session 持久化) 5. 腾讯云 COS 账号(用于图片存储) ### 配置文件 在 `src/main/resources/application-dev.yml` 中配置以下内容: ```yaml spring: datasource: url: jdbc:mysql://:3306/da_note username: <用户名> password: <密码> redis: host: port: 6379 cos: client: host: secretId: secretKey: region: <地域> bucket: <存储桶名> ``` ### 本地启动 ```bash # 克隆项目 git clone https://gitee.com/darling_da/da_picture # 进入目录 cd da_picture # 构建并启动 mvn clean package -DskipTests java -jar target/da-note-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev ``` 启动成功后访问: - 接口文档:`http://localhost:9090/api/doc.html` - 健康检查:`http://localhost:9090/api/health` ### 生产部署 ```bash # 构建生产包 mvn clean package -DskipTests -Pprod # 后台运行 nohup java -jar target/da-note-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod > app.log 2>&1 & ``` 建议配合 Nginx 反向代理使用。 ## 异常码说明 | 错误码 | 含义 | |--------|------| | 40000 | 请求参数错误 | | 40100 | 未登录 | | 40101 | 无权限 | | 40400 | 资源不存在 | | 50000 | 系统内部异常 | | 50001 | 操作失败 | ## 开源许可 本项目采用 MIT License,详见 LICENSE 文件。 ## 联系方式 如有问题或建议,请在 Gitee 提交 Issues。