feat(m8): P1 MinIO 对象存储与文件管理
- 迁移 000023 gateway.file_objects(personal/system 归属隔离 + 部分索引) - internal/platform/storage:minio-go 适配(端点 scheme 剥离、流式 PutObject/Open/Delete) - internal/workbench/files.go:FileService(sha256 校验、PutObject-then-insert 回滚、delete 先删行再删对象) - admin /api/v1/admin/files + portal /api/v1/portal/files 处理器(流式上传下载、Content-Disposition) - RBAC file:read/file:manage;菜单加文件管理 + 门户文件仓库 - compose 增 minio 服务(S3_* anchor、不暴露端口);nginx client_max_body_size 32m→256m - 管理端文件管理页 + 门户个人文件仓;集成测试 TestFileObjectLifecycle 连真 MinIO 通过 - healthz object_storage:true;README/PRODUCTION/进展文档同步 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -113,3 +113,12 @@
|
||||
- Compose 同时交付 API、管理端 `8081` 和门户端 `8082`;同一前端 Dockerfile 通过受限 build arg 构建两套独立 SPA。
|
||||
|
||||
工程实现与本地生产等价验证已关闭。正式上线仍是外部发布门禁:拿到实际旧数据库脱敏快照和旧密钥迁移授权后执行领域转换,并在真实新旧双系统与生产等价流量下完成影子观察、容量验收及切换/回退演练;这些动作不会在缺少生产数据和授权时伪造为已执行。
|
||||
|
||||
## 已完成:M8 基础设施层(P1 对象存储与文件管理)
|
||||
|
||||
- 自托管 MinIO 对象存储入基线:`internal/platform/storage`(minio-go 适配层)剥离 scheme 推导 Secure,领域层不直接依赖 S3 客户端;`S3_*` 配置默认值 + Validate(1–512 MiB 上限、endpoint 无路径)。迁移 `000023` 建 `gateway.file_objects`(uuid/object_key 唯一/sha256/scope/owner 校验 + 部分索引)。
|
||||
- 文件上传/下载全部经网关代理(MinIO 不暴露主机端口):流式 multipart 上传(`http.MaxBytesReader` + `LimitReader` 超限即拒),`PutObject` 成功后才插元数据行、失败回滚对象;下载 io.Copy 流式 + RFC 5987 `filename*`;删除先删行再 best-effort 清对象(避免孤儿阻塞删除)。
|
||||
- `FileService` 个人/系统双范围:admin 文件管理(`file:read|manage` RBAC + 管理端文件管理页)与 portal 个人文件仓(严格归属隔离,跨用户读返回 404)。
|
||||
- Compose(dev + production)新增 `minio` 服务与 `minio-data` 卷;nginx `client_max_body_size` 32m→256m 盖过 128 MiB 上传上限;`.env.example` / `production.env.example` 补 `S3_*`。
|
||||
- 端到端验证:上传→列表→下载往返一致→删除后桶无孤儿;admin 读 portal 文件 404;`TestFileObjectLifecycle` 集成测试连真实 MinIO+PostgreSQL 通过;`go build ./...`、`go vet ./...`、全量单测通过。
|
||||
- 管理端"文件管理"与门户端"文件仓库"菜单由服务端动态菜单下发。
|
||||
|
||||
Reference in New Issue
Block a user