You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.0 KiB
2.0 KiB
02 — 缩略图 API 读路径 + 占位图
What to build: 缩略图读取端点和按状态返回的行为。新增 FileApi.getThumbnail(String fileId) 方法返回 byte[],FileController 新增 GET /api/file/thumbnail?fileId=xxx 端点(信封例外:成功返回 image/jpeg 二进制流,失败返回 JSON 信封)。新建 ThumbnailPlaceholderService,按文件扩展名返回预置的文件类型图标占位图。getThumbnail 行为:查 FileInfo(查无/已删除 → 40401)→ thumbnail_status = READY 时从 MinIO 拉 thumbnails/{fileId}.jpg 返回二进制 + Cache-Control: max-age=86400;UNSUPPORTED/FAILED/PENDING 返回占位图 + Cache-Control: no-cache。FileInfoDTO 新增 thumbnailStatus 字段(nullable,向后兼容)。可手动往 MinIO 塞缩略图并把状态设成 READY 来验证端到端。
Blocked by: 01 — 基础设施(prefactor)
Status: ready-for-agent
FileApi接口新增ThumbnailDTO getThumbnail(String fileId)方法声明(原设计byte[],实现时改为 DTO 以承载 202 与缓存语义,见 spec §7.1)FileApiImpl实现getThumbnail:查 FileInfo → READY 拉缩略图对象返回 + max-age=86400;UNSUPPORTED/FAILED/PENDING 返回占位图 + no-cacheThumbnailPlaceholderService新建,按扩展名返回文件类型占位图(原设计预置静态资源,实现改为运行时 Graphics2D 绘制 PNG + 扩展名文字,见 spec §7.1)FileController新增GET /api/file/thumbnail端点,返回ResponseEntity<byte[]>(信封例外)FileInfoDTO新增thumbnailStatus字段,from()方法补充映射- 测试:READY 状态返回 MinIO 缩略图二进制 + max-age=86400
- 测试:UNSUPPORTED 状态返回占位图 + no-cache,不触碰 MinIO 缩略图路径
- 测试:FAILED 状态返回占位图 + no-cache
- 测试:PENDING 状态返回占位图 + no-cache(本票不含同步生成)
- 测试:文件查无/已删除 → 40401
- 测试:fileId 非法格式 → 40401