用途
cloud-upload-backup 是一个云文件上传与备份工具,将本地文件上传至腾讯 SMH 云存储,上传后可在 QClaw 小程序中查看。使用 @tencent/smh-js-sdk 官方 SDK。QClaw 在需要将文件上传到云端的任何场景中使用此技能。
主要能力
- 单文件上传:通过 upload 接口指定本地文件路径上传。
- 批量上传:通过 batch-upload 接口一次上传多个文件(最多 20 个),服务端按顺序处理(不并行)并返回单条汇总 message。
- 文件信息查询:通过 info 接口获取云端已有文件的链接、预览和元数据。
- 云目录列表:通过 list 接口列出云目录中的文件,dirPath 默认为 backup,limit 默认 50。
- 同名冲突处理:提供 ask(默认,返回错误让用户选择)、rename(自动重命名,如 file(1).pdf)、overwrite(静默覆盖)三种策略。
- 文件大小支持:没有文件大小限制。小文件(≤ 50 MB)读入内存快速上传;大文件(> 50 MB)使用分盘懒读取,SDK 以 5 MB 分片进行多部分上传,10 GB+ 文件也可顺利上传。
- 短链生成:上传后脚本自动将 COS 文件地址通过 JPRX 短链服务(data/4096/forward)转换为短链,格式为 https://jsonproxy.3g.qq.com/urlmapper/xxx。手机端点击短链拉起 QClaw 小程序(文件保留 30 天),PC 端点击短链打开 H5 扫码页,用户微信扫码后跳转小程序查看文件。
使用方式
设置:无需额外安装依赖。文件上传通过本地 HTTP 接口 /proxy/qclaw-cos 完成,SMH 凭证由主进程自动管理,无需手动配置。
完整流程:
- 识别本地文件路径。
- 通过 upload 命令上传(批量时循环调用)。
- 原样输出 JSON 响应中的 message 字段。
单文件上传示例:
curl -s -X POST http://localhost:PORT/proxy/qclaw-cos/upload -H 'Content-Type: application/json' -d '{"localPath":"/path/to/file.pdf","conflictStrategy":"ask"}'
上传到指定目录:
-d '{"localPath":"/path/to/photo.jpg","remotePath":"photos/photo.jpg","conflictStrategy":"ask"}'
用户明确要求覆盖:conflictStrategy: "overwrite";用户明确要求重命名:conflictStrategy: "rename"。
批量上传示例:
curl -s -X POST http://localhost:PORT/proxy/qclaw-cos/batch-upload -H 'Content-Type: application/json' -d '{"files":[{"localPath":"/path/to/file1.pdf","conflictStrategy":"ask"},{"localPath":"/path/to/file2.docx","conflictStrategy":"ask"},{"localPath":"/path/to/file3.jpg","conflictStrategy":"ask"}]}'
查询文件信息:
curl -s -X POST http://localhost:PORT/proxy/qclaw-cos/info -H 'Content-Type: application/json' -d '{"remotePath":"report.pdf"}'
列出云目录:
curl -s -X POST http://localhost:PORT/proxy/qclaw-cos/list -H 'Content-Type: application/json' -d '{"dirPath":"/"}',可加 "limit":20。
PORT 获取:所有 HTTP 请求中的 PORT 从环境变量 AUTH_GATEWAY_PORT 获取,该变量由 Electron 主进程在启动 Auth Gateway 时自动设置,子进程自动继承,未设置时回退到默认端口 19000。
父进程 ID 获取:执行 curl 前,获取当前进程父进程 ID 并打印到控制台,格式为 [QClaw] Parent PID: <ppid>。
命令与结果对应:
- 上传单个文件 → upload → 原样输出 message 字段。
- 上传多个文件(2 个及以上)→ batch-upload → 原样输出 message 字段。
- "这个云文件还在吗"/"查看文件信息" → info → 向用户展示文件元数据。
- "云上有哪些文件"/"列出备份文件" → list → 向用户展示文件列表。
冲突处理:使用 conflictStrategy: "ask"(默认)时,若同名文件已存在,上传失败并返回错误,QClaw 询问用户如何处理:覆盖、重命名或取消,然后用用户选择的策略重新上传。
适用场景
- 用户说"上传文件"、"上传某个文件"等需要上传文件的场景。
- 用户要求上传 2 个及以上文件时使用 batch-upload。
- 需要查看云端文件信息或列出备份文件时使用 info / list。
限制与注意
- 用户说"上传文件"但未指定路径时,需追问文件路径或文件名。
- 默认必须使用 conflictStrategy: "ask",用户未明确表态时不得使用 rename 或 overwrite。
- 文件默认上传到云空间根目录,可通过 remotePath 指定目标路径。
- message 字段由服务端预渲染,包含文件名、大小、文件链接和标准提示,必须原样输出,不得自行拼接或改写。
- 401 / token 过期时提示用户联系管理员刷新;网络错误重试 2 次、间隔 3s,仍失败则输出 message。
- 不得在 success: false 时展示文件链接,不得硬编码或暴露 SMH 凭证,不得未经用户主动要求上传其本地个人文件。
- 短链在手机端和小程序端行为不同,文件保留 30 天;链接过期时用 info 获取新链接并重新生成短链。
- 收费、价格信息暂未提供。