# 项目头像上传与获取功能开发概要 ## 1. 配置文件调整 - 在 `src/main/resources/application.yml` 增加如下配置: ```yaml avatar: root-path: D:/avatar-storage/ max-size: 2MB allowed-types: jpg,png,jpeg,webp ``` ## 2. Controller 层 - 新增 `UserAvatarController`,实现: - `POST /user/avatar/upload`:接收 MultipartFile,校验类型/大小,仅允许当前用户上传,调用 Service 处理,返回 `R`(data 字段为相对路径,例如 `userId/timestamp.ext`)。未经认证时返回 `R.fail(401, "未认证", null)`。 - `GET /user/avatar/{userId}`:根据 userId 查询头像相对路径,返回图片流,找不到或文件不存在返回404。Controller 会尝试用 `Files.probeContentType` 标定 Content-Type。 - 接口需加 Swagger 注解,响应格式与项目一致。 ## 3. Service 层 - 增加 `UserAvatarService` 及实现类:`UserAvatarServiceImpl`,负责: - 头像存储路径生成(默认 `{root}/{userId}/{timestamp}.{ext}`)、文件校验(由 `FileUtils` 验证类型与大小)、保存本地、数据库 `avatar` 字段更新。若发生参数异常(如文件类型或大小),服务抛出 `CustomException` 并使用 `ErrorCode.PARAMETER_ERROR` 返回前端。 - 获取头像文件流,处理异常和默认头像。 - 日志记录(info/error,含 userId、文件名、IP)。 ## 4. Model/VO 层 - `UserInfo` 实体已含 avatar 字段,无需变更。 - 如有头像相关 VO,userId 字段类型需为 String。 ## 5. 工具类/配置类 - 已有 `AvatarProperties` 配置类,前缀 `avatar`:`root-path`、`max-size`、`allowed-types`,`maxSize` 默认 2MB,`allowedTypes` 默认为 `jpg,png,jpeg,webp`。 ## 6. 日志与安全 - 上传/更新/异常操作按规范记录日志。 - 上传接口需校验当前用户,仅允许本人操作。 - 获取接口需防止路径穿越。 ## 7. 测试 - 增加单元测试和集成测试,覆盖文件校验、路径生成、接口兼容性等。 ## 8. 文档与Swagger - 补充接口注解,确保 Swagger 文档完整,泛型返回类型文档化。 --- 如需详细开发步骤可进一步细化。