文件面与云盘
文件面是「看得见、动得了企业文件」的那一层:浏览、上传、下载、搜索、整理、分享。它覆盖两个存储位置——部门运行时的工作目录,和公司级知识库——但对使用者只呈现一套界面、一套权限语义、一套路径纪律。
把它想成企业的外接硬盘:插上去就能像本地文件夹一样操作,但每一次读写都经过权限闸门并留下记录。「像本地一样好用」是体验目标,「每一步都可审计」是不可让步的底线。
一套文件面,三种存储驱动
文件面把存储位置抽象成驱动。同一套接口、同一套权限判定,落到不同的物理位置:
| 驱动 | 落在哪 | 典型用途 |
|---|---|---|
| 本地驱动 | 平台自身可直接访问的挂载目录 | 开发与自用环境 |
| 远程驱动 | 客户部门运行时所在服务器的文件系统 | 工作目录:正在处理的文件 |
| 对象存储驱动 | 公司级中央知识桶 | 知识库:需要被长期引用的语料 |
切换驱动对使用者是透明的:同一个「上传」按钮,落到工作目录还是知识库,取决于当前所在的位置,而不是取决于用了哪个功能。三个驱动执行完全相同的路径纪律。
五条不可越过的纪律
文件面直接触碰客户的原始数据,因此它的约束比其它模块更硬。下面五条是设计约束,不是配置项:
字节不过脑Bytes bypass the model文件内容不进入任何模型的上下文,除非是当前任务明确需要阅读的那一份。搬运、复制、归档这类操作只传递路径与句柄,字节走存储通道,不经过推理层。
出站唯一One egress文件离开组织边界只有一条通道——显式的分享动作。没有第二条出口:没有临时链接后门,没有「顺手发出去」的旁路。
挂载表即不变量Mount table invariant每台运行时声明自己开放哪些顶层目录,其余兄弟目录既不可读也不可见。凭证、备份、系统目录不在挂载表里,因此在文件面上根本不存在。
窄通道只送地址Pointers, not payloads大文件永远不从受限通道穿过。需要下载或预览时,系统发放一个有时效的直连地址,字节在客户与存储之间直接流动,不经过平台中转。
写必带前置条件Guarded writes任何覆盖写都要携带「我以为它现在是什么样」的前置条件。条件不符即拒绝,不静默覆盖——并发编辑与自动化任务撞车时,系统给出冲突,而不是丢失一个版本。
路径纪律与权限
- 根目录禁闭。所有路径在真实解析后必须落在声明的根之内;
..一律拒绝。 - 隐藏路径不可达。用户可见操作拒绝以点开头的路径段,系统内部暂存区因此不可被读写。
- 顶层白名单。挂载可以只放行若干顶层目录——列表只显示它们,搜索只进它们的子树。
- 身份贯穿。每一次读写都带着发起者身份判定,操作员与成员账号看到的目录范围不同;数字员工同样受此约束。
大文件与整目录
上传不是单次请求,而是一个可续、可取消、可重试的会话:文件按块传输,进度实时可见,中断后可以从断点继续。整目录上传保持原有层级结构,不会被压平成一堆同级文件——这一点在迁移历史资料时至关重要。
文件分享
分享是文件离开组织边界的唯一动作,因此它自带治理:每次分享生成不可枚举的链接,绑定受众范围(登录可见 / 指名可见 / 公开链接),随时可撤销;撤销后链接立即失效。分享与撤销都写入操作台账,evidence 只记录受众与链接标识,不记录文件内容。
「公开链接」意味着任何拿到链接的人都能访问。它适用于需要发给尚未开通账号的外部人员的材料;涉及部门级或指名级分级的文件,系统不允许设为公开。
相关阅读
- 知识库与语料治理 — 对象存储驱动之上的语料治理层
- 数据边界 — 为什么字节不经过平台中转
- Artifacts 发布 — 把文件变成可访问页面的另一条通道