plugins
HTTP
查看 MarkdownKasumi HTTP 下载插件的方法、限制、权限与生命周期。
理解 HTTP 插件的 HTTPS 下载、虚拟目标、重定向、超时、取消和资源上限。
HTTP 插件当前只提供下载。它不提供通用请求、上传、进度事件、公开 AbortSignal、请求头
定制或响应缓存。下载内容必须写入可写虚拟文件系统,不返回真实文件路径。
| 层级 | 入口 | 责任 |
|---|---|---|
| 前端 API | frontend/src/api/http.ts | URL、路径、布尔值和 120 秒超时 |
| 协议清单 | protocol/plugins.json | http 插件和 http.download 归属 |
| Windows 插件 | windows/src/plugins/ksm_http_plugin.cpp | 请求分发和取消 |
| Windows 传输 | windows/src/platform/ksm_windows_host_services.cpp | WinHTTP、重定向和临时文件 |
| Android 传输 | KSMAndroidHostServices.kt | HttpsURLConnection 和生命周期取消 |
| 命令 | Windows | Android | 权限 | 返回 |
|---|---|---|---|---|
http.download | 支持 | 支持 | http.download | { path, bytes } |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
url | string | 是 | 绝对 https:// URL |
path | string | 是 | app://data、app://cache 或 app://tmp 下的文件路径 |
overwrite | boolean | 否 | 默认 false |
固定语义:
app://picked 或真实文件路径。.part 文件,成功后提交;失败、超时或取消时删除临时文件。overwrite: false 时目标已存在返回 IO_ERROR。cancel 链路中止请求。try {
const result = await KSM.http.download({
url: 'https://example.com/releases/kasumi.zip',
path: 'app://cache/releases/kasumi.zip',
overwrite: false
});
console.info(result.path, result.bytes);
} catch (error) {
if (error instanceof Error && error.name === 'IO_ERROR') {
console.warn('目标已存在或下载提交失败');
}
}Windows 使用 WinHTTP 并关闭自动重定向,取消时关闭活动句柄。Android 使用
HttpsURLConnection,取消时 disconnect() 活动连接。Android 在低内存或 Activity
销毁时只取消当前窗口下载;两端都逐跳校验 HTTPS。
| 错误码 | 场景 |
|---|---|
INVALID_ARGS | URL、路径或 overwrite 类型非法 |
PERMISSION_DENIED | 未授予 http.download 或路径越界 |
BUSY | 同一请求 ID 已有下载 |
IO_ERROR | 目标存在、重定向超限、体积超限、网络或提交失败 |
TIMEOUT | 前端请求超时或宿主总下载超时 |
CANCELLED | 页面重载、窗口销毁或显式取消 |
NOT_SUPPORTED | 宿主未配置下载服务 |
overwrite: true,或改用新路径。.part 文件。
评论