跳转到内容

x/fileapi Primer

实验性 — API 兼容性未冻结。采用前请先评估。查看发布策略了解当前成熟度。

当你已经通过 x/* 家族 确认问题明显属于文件操作的 HTTP 传输层时,打开这一页:处理 multipart 上传、流式下载、从请求上下文解析租户身份,或将文件路由 handler 接入应用。

x/fileapi 是文件操作的 HTTP 传输层,将 x/data/file 实现组合在稳定的 store/file 合约之后。存储接口定义在 store/file;tenant 感知存储实现在 x/data/file;本包仅负责传输。

  • 你正在添加或修改解析 multipart 表单数据的文件上传 handler
  • 你正在实现流式文件下载或传输(Handler.Download
  • 你正在将文件操作路由接入应用的 routes.goHandler.UploadHandler.DownloadHandler.GetInfoHandler.GetURLHandler.DeleteHandler.List
  • 你正在从请求上下文提取租户身份或用户身份用于文件操作(WithUserIDUserIDFromContext
  • 你正在为文件传输添加请求验证或错误处理
  • 改动关于存储接口定义 — 那属于 store/file
  • 工作是 tenant 感知文件存储实现(后端、路径策略)— 那属于 x/data/file
  • 改动引入业务仓库逻辑,如每用户配额或文件元数据 schema — 保留在应用代码中
  • 工作关于路由注册策略或应用 bootstrap — 保留在 app/routes.go
  1. x/fileapi/module.yaml
  2. x/fileapi/handler.go
  3. x/fileapi/context.go
这些工作适合留在 x/fileapi一旦变成这些问题就应移出
Handler.Upload:multipart 表单解析、文件验证、流式写入存储存储后端选择或路径策略 — 那属于 x/data/file
Handler.Download:带 range 支持的流式传输与正确 content header存储接口合约 — 那属于 store/file
Handler.GetInfoHandler.GetURLHandler.DeleteHandler.List:标准文件操作表面每用户配额执行或业务专属元数据 schema
WithUserIDUserIDFromContext:在上下文中附加和读取上传者身份租户解析 — 那属于 x/tenant/resolve
所有错误响应使用 contract.WriteError绕过合约模型的裸 http.Error 调用

文件处理跨越多个层——存储、租户和 HTTP 传输——很容易混淆。x/fileapi 是严格的传输层:handler 负责验证、流式传输和委托;它们不拥有存储后端、租户策略或业务规则。租户提取来自上下文,永远不来自请求体或路径,因为这是安全约束。