Skip to content

file_transfer ​

在插件与框架之间分片上传、下载和读取文件。

适用协议

框架接口,不受 QQ 登录协议限制。

调用方式 ​

json
{
  "type": "action",
  "id": "file_transfer-1",
  "action": "file_transfer",
  "params": {
    "operation": "start_upload",
    "filename": "hello.txt",
    "size": 5,
    "sha256": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
  }
}

参数 ​

参数类型必填说明
operationstring是start_upload、write、finish、start_download、read、status 或 cleanup。

返回值 ​

start_upload、write、finish、start_download、status 返回:

字段类型说明
tokenstring当前服务专用传输标识
filestringtransfer:// 引用;完成后可传给媒体上传等接口
filenamestring文件显示名
size、offsetnumber总大小与已接收位置,单位字节
statusstringuploading 或 ready
expires_atstringUTC RFC3339 失效时间
max_chunk_sizenumber最大分片 1048576 字节
sha256string完成后返回的文件摘要
width、heightnumber识别为图片时可返回尺寸

read 返回 { token, offset, next_offset, data, eof, size, sha256 },data 为标准 Base64。cleanup 返回 { removed: true }。

注意事项 ​

此接口不接收 self_id 或 protocol_id,传输绑定当前插件服务。单文件上限 128 MiB,单分片上限 1 MiB;单服务最多 4 个传输、预留 256 MiB,全局最多 32 个、512 MiB。传输保存 10 分钟,finish 与下载完成后重新计时;重启后令牌不可复用。用完请 cleanup。

transfer:// 是框架中的临时文件引用,不是 QQ 媒体 file_id;要发送图片、语音或视频,仍须调用对应媒体上传接口。

分片上传 ​

operation参数说明
start_uploadfilename?: string、size: number、sha256: stringsize 可为 0;sha256 为原始完整文件的 64 位十六进制摘要
writetoken: string、offset: number、data: string标准 Base64,按 offset 顺序提交;允许相同内容的完整重复分片,不允许缺口或覆盖不同内容
finishtoken: string校验完整长度及 SHA256 后才标记 ready;可重复查询已完成结果
statustoken: string查询状态与已接收位置
cleanuptoken: string删除临时文件与传输记录

上方创建示例为 5 字节的 hello。拿到 token 后依次发送:

json
{"operation":"write","token":"创建返回的token","offset":0,"data":"aGVsbG8="}
json
{"operation":"finish","token":"创建返回的token"}

下载与读取 ​

参数类型必填说明
operationstring是start_download
sourcestring是公网 HTTP(S) 地址、允许读取的本地路径/file:// 路径,或当前服务的已完成 transfer:// 引用
filenamestring否文件显示名
sha256string否可选预期摘要,提供时须匹配最终文件
kindstring否file(默认)、image、record
out_formatstring否仅 kind=record 时可传 mp3 或 wav;转换失败会返回错误
headersobject 或 string[]否下载请求头;禁止 Host、Connection、Content-Length、Transfer-Encoding、Proxy-Authorization、Proxy-Connection;对象值为字符串或字符串数组,数组项为“名称: 值”

远端下载最长 2 分钟,禁止访问本机、内网和保留网段。本地路径仍受框架文件访问限制,并非任意文件读取。

下载 ready 后分片读取:

json
{"operation":"read","token":"下载返回的token","offset":0,"length":65536}

length 默认 65536,范围 1–1048576。按 next_offset 继续,直到 eof=true。

萌卡 · 自托管 QQ 机器人框架