api
在 Kasumi 虚拟文件系统中读写文本、检查文件存在性并删除可写文件。
在 Kasumi 虚拟文件系统中读写文本、检查文件存在性并删除可写文件。
fs 只接受 app:// 虚拟路径,不暴露宿主真实路径、content:// URI 或绕过协议的
第三个文件 API。实现入口是 frontend/src/api/fs.ts 和
frontend/src/api/guards.ts。
| 方法 | 权限 | 返回值 |
|---|---|---|
| readText | fs.read | string | { file } |
| writeText | fs.write | { written: true } |
| exists | fs.read | { exists: boolean } |
| remove | fs.remove | { removed: boolean } |
| 路径 | 用途 | 读取 | 写入 /删除 |
|---|---|---|---|
app://data/** | 应用私有数据 | 是 | 是 |
app://cache/** | 缓存 | 是 | 是 |
app://tmp/** | 临时文件 | 是 | 是 |
app://picked/** | 用户选择的文件 | 是 | 是 |
app://res/** | 打包资源 | 是 | 否 |
app://assets/** | 前端构建资源 | 是 | 否 |
app://picked/<id> 只接受一个文件 token,不能继续带子路径。文件选择器返回的句柄
才能映射到用户文件,业务代码不得自行拼接 token。
前端会在发送请求前拒绝以下输入:
..、~。app://data|cache|tmp|picked|res|assets 根。:、反斜杠或以 / 开头。app://picked/<id> 中出现额外 /。这些情况抛普通 TypeError,不是 INVALID_ARGS 或 PERMISSION_DENIED。
绕过前端封装直接调用 KSM.invoke() 时,仍由宿主执行同样的路径拒绝。
单条消息上限是 64 KiB。readText 读取的内容超过 64 KiB 时返回:
{ file: 'app://tmp/read-1.txt' }句柄指向临时文件,不是原始文件路径。再次读取同一个临时句柄仍返回该句柄, 不会无限复制。单文件读取上限是 16 MiB。
import { fs } from '@kasumi/bridge';
await fs.writeText({
path: 'app://data/config.json',
content: '{"ready":true}'
});
const result = await fs.readText({
path: 'app://data/config.json'
});
if (typeof result === 'string') {
console.info(result);
} else {
console.info(`大文本句柄: ${result.file}`);
}data、cache、tmp 或有效的 picked 句柄。TypeError 通常是路径守卫直接拒绝。{ file };大文本需要按句柄继续处理。
评论