Skip to content

Cdn 结构

CdnDownload 结构

字段类型说明
methodNamestr方法名
fileKeystr文件标识
argInfostr参数信息
debugIPstr调试IP
urlstr下载链接
hoststr主机
refererstr来源页
savePathstr保存路径
statePathstr状态文件路径
aeskeystr加密密钥
initialIVstr初始向量
fileidstr文件ID
netflowTagstr流量标签
expectFileMD5str预期文件MD5
msgExtrastr消息扩展字段
bigfileSignaturestr大文件签名
requestVideoFlagstr视频请求标识
hlsVideoFlagstrHLS视频标识
finderByPassstr发现页旁路标识
snsCipherKeystrSNS加密密钥
signalQualitystr信号质量
snsScenestrSNS场景
customHeaderstr自定义请求头
fakeBigfileSignaturestr伪大文件签名
fakeBigfileSignatureAeskeystr伪大文件签名密钥
bakup_urlstr备用下载地址
serialized_verify_headersstr序列化校验头
feedIdstr流ID
httpMethodstrHTTP请求方法
snsVideoStragegystrSNS视频策略
clientTagstr客户端标识
taskGroupKeystr任务组标识
fileTypeint文件类型
bizidint业务ID
apptypeint应用类型
queueTimeoutSecondsint队列超时秒数
transforTimeoutSecondsint传输超时秒数
downloadModeint下载模式
chatTypeint会话类型
downloadBehaviorint下载行为
requestVideoFormatint请求视频格式
videoflagPolicyint视频标识策略
preloadRatioint预加载比例
msgTypeint消息类型
concurrentCountint并发数
maxHttpRedirectCountint最大重定向次数
connectionCountint连接数
certificateVerifyPolicyint证书校验策略
pcdnAppIDintPCDN应用ID
videoDownloadModeint视频下载模式
statefileKeepHoursint状态文件保留时长
taskGroupCapacityint任务组容量
resolveHostPriorityint域名解析优先级
resolveHostFlagsint解析标记
maxPCDNConnectionsint最大PCDN连接数
expectFileSizelong预期文件大小
preloadMinSizelong预加载最小大小
taskStartTimelong任务开始时间
maxFileSizelong最大文件大小
isSilentTaskbool是否静默任务
isStorageModebool是否存储模式
isSmallVideobool是否小视频
isLargeSVideobool是否大SNS视频
isAutoStartbool是否自动开始
isColdSnsDatabool是否冷启动SNS数据
isHotSnsVideobool是否热SNS视频
isHLSVideobool是否HLS视频
treatAsVideoFilebool是否按视频文件处理
preAllocStoragebool是否预分配存储空间
allow_mobile_net_downloadbool是否允许移动网络下载
is_resume_taskbool是否断点续传任务
wifiAutoStartboolWIFI下自动开始
useNewdnsbool是否使用新DNS
tryRealtimeTransportProtocolbool是否尝试实时传输协议
reportDetailPacketTransInfobool是否上报详细传输信息
bizReqPayLoadbyte[]业务请求载荷
finderMediaCdnInfobyte[]发现页媒体CDN信息
supportFormatsint[]支持的格式列表

CdnUpload 结构

字段类型说明
methodNamestr方法名
fileKeystr文件标识
toUserstr接收方ID
debugIPstr调试IP
netflowTagstr流量标签
forwardFileidstr转发文件ID
forwardAeskeystr转发加密密钥
bigfileSignaturestr大文件签名
hoststr上传主机
filemd5str文件MD5
filePathstr上传文件路径
midimgPathstr中等缩略图路径
thumbfilePathstr缩略图路径
fakeBigfileSignaturestr伪大文件签名
fakeBigfileSignatureAeskeystr伪大文件签名密钥
statePathstr状态文件路径
uristr上传接口URI
emojiExtinfostr表情扩展信息
customHeaderstr自定义请求头
clientTagstr客户端标识
serverGroupKeystr服务端分组标识
queueTimeoutSecondsint队列超时秒数
transforTimeoutSecondsint传输超时秒数
isLargeSVideoint是否大SNS视频
videoSourceint视频来源
chatTypeint会话类型
fileTypeint文件类型
fileFormatint文件格式
midFormatint中等图格式
thumbFileTypeint缩略图文件类型
concurrentCountint并发数
bizidint业务ID
apptypeint应用类型
uploadFromint上传来源
sendmsgFromCDNbool是否从CDN直接发消息
checkExistOnlybool仅检查文件是否存在
isSmallVideobool是否小视频
isSnsAdVideobool是否SNS广告视频
isStorageModebool是否存储模式
forceNoSafeCdnbool强制不使用安全CDN
trySafeCdnbool尝试使用安全CDN
enableHitCheckbool启用文件命中检查
tryRealtimeTransportProtocolbool尝试实时传输协议
bizSnsPreUploadboolSNS业务预上传
bizReqPayLoadbyte[]业务请求载荷
fileBufferbyte[]文件二进制数据
thumbnailBufferbyte[]缩略图二进制数据

使用示例

java
// 下载回调
void onCdnDownload(data) {
    String msg = "\n[ CDN 下载 ]\n";
    msg += "方法: " + data.methodName + "\n";
    msg += "业务: " + getFileTypeName(data.fileType) + " (" + data.fileType + ")\n";
    msg += "链接: " + data.url + "\n";
    msg += "路径: " + data.savePath + "\n";
    if (!data.aeskey.equals("")) {
        msg += "AES密钥: " + data.aeskey + "\n";
    }
    if (!data.snsCipherKey.equals("")) {
        msg += "SNS密钥: " + data.snsCipherKey + "\n";
    }
    if (!data.feedId.equals("")) {
        msg += "来源: 视频号(FeedId: " + data.feedId + ")\n";
    }
    
    String chatInfo = data.chatType == 1 ? "私聊" : (data.chatType == 2 ? "群聊" : "其他");
    msg += "场景: " + chatInfo + " | 预期大小: " + formatSize(data.expectFileSize) + "\n";
    
    if (data.isSilentTask)
        msg += "状态: 系统静默预加载\n";
    if (data.is_resume_task)
        msg += "状态: 断点续传中\n";
    
    msg += "---------------------------------";
    log(msg);
}

// 上传回调
void onCdnUpload(data) {
    String msg = "\n[ CDN 上传 ]\n";
    msg += "方法: " + data.methodName + "\n";
    msg += "类型: " + getFileTypeName(data.fileType) + "\n";
    msg += "目标: " + data.toUser + "\n";
    msg += "路径: " + data.filePath + "\n";
    if (!data.thumbfilePath.equals("")) {
        msg += "缩略图: " + data.thumbfilePath + "\n";
    }
    msg += "文件MD5: " + data.filemd5 + "\n";
    
    if (!data.forwardFileid.equals("")) {
        msg += "转发识别: 该任务为转发/秒传\n";
        msg += "转发ID: " + data.forwardFileid + "\n";
        msg += "转发Key: " + data.forwardAeskey + "\n";
    }
    if (data.trySafeCdn)
        msg += "安全: 已开启 SafeCDN 模式\n";
    if (data.bizSnsPreUpload)
        msg += "状态: 朋友圈资源预上传\n";
    
    msg += "---------------------------------";
    log(msg);
}

String getFileTypeName(int type) {
    switch (type) {
        case 1: return "高清图";
        case 2: return "普通图";
        case 3: return "缩略图";
        case 4: return "视频";
        case 5: return "通用文件";
        case 6: return "小视频";
        case 15: return "聊天语音";
        case 20201: return "视频号图片";
        case 20202: return "朋友圈视频";
        case 20302: return "视频号视频";
        case 20303: return "APP文件";
        default: return "未知类型";
    }
}

String formatSize(long size) {
    if (size <= 0) return "未知";
    if (size < 1024) return size + " B";
    if (size < 1024 * 1024) return (size / 1024) + " KB";
    return String.format("%.2f MB", (double)size / (1024 * 1024));
}

FkWeChat 插件开发文档