- 所有对外能力统一通过 `FileApi` 接口暴露,Controller 和内部调用方不得绕过该门面直接访问底层实现。 - 错误处理使用 `crm-base` 提供的 `BusinessErrorException`、`MissingParameterException`、`ResourceNotExistException`,并通过 `FileConstants` 中的错误码常量统一管理。 - 文件 objectKey 遵循 `{业务域}/{yyyy}/{MM}/{fileId}.{扩展名}` 格式,由 `buildObjectKey` 集中生成,不对业务模块暴露。 - 分片上传严格遵循 init → upload → complete 三段式协议,会话状态存 Redis,临时分片以 `chunks/{uploadId}/{序号}` 命名于 MinIO,缺片校验以列举 MinIO 对象为准而非额外进度表。 - 流式操作(上传/下载)一律使用 `InputStream` 并由调用方负责关闭,避免内存驻留大文件。 - 非致命异常(如 MinIO 删除失败、bucket 初始化失败)仅记录 warn/error 日志而不阻断主流程,保证容错性。