mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2026-03-01 00:00:26 +00:00
Reworked the group album image upload process to use a new slice-based upload method, replacing the previous chunked upload implementation. Updated related interfaces and removed unused chunk upload code for improved maintainability and clarity.
177 lines
4.0 KiB
TypeScript
177 lines
4.0 KiB
TypeScript
|
|
export interface ControlReq {
|
|
appid?: string;
|
|
asy_upload?: number;
|
|
biz_req?: BizReq;
|
|
check_type?: number;
|
|
checksum?: string;
|
|
cmd?: string;
|
|
env?: Env;
|
|
file_len?: number;
|
|
model?: number;
|
|
session?: string;
|
|
token?: Token;
|
|
uin?: string;
|
|
}
|
|
|
|
export interface BizReq {
|
|
iAlbumTypeID: number;
|
|
iBatchID: number;
|
|
iBitmap: number;
|
|
iDistinctUse: number;
|
|
iNeedFeeds: number;
|
|
iPicHight: number;
|
|
iPicWidth: number;
|
|
iUploadTime: number;
|
|
iUploadType: number;
|
|
iUpPicType: number;
|
|
iWaterType: number;
|
|
mapExt: MapExt;
|
|
sAlbumID: string;
|
|
sAlbumName: string;
|
|
sPicDesc: string;
|
|
sPicPath: string;
|
|
sPicTitle: string;
|
|
stExtendInfo: StExtendInfo;
|
|
}
|
|
|
|
export interface MapExt {
|
|
appid: string;
|
|
userid: string;
|
|
}
|
|
|
|
export interface StExtendInfo {
|
|
mapParams: MapParams;
|
|
}
|
|
|
|
export interface MapParams {
|
|
batch_num: string;
|
|
photo_num: string;
|
|
video_num: string;
|
|
}
|
|
|
|
export interface Env {
|
|
deviceInfo: string;
|
|
refer: string;
|
|
}
|
|
|
|
export interface Token {
|
|
appid: number;
|
|
data: string;
|
|
type: number;
|
|
}
|
|
|
|
export function qunAlbumControl({
|
|
uin,
|
|
group_id,
|
|
pskey,
|
|
pic_md5,
|
|
img_size,
|
|
img_name,
|
|
sAlbumName,
|
|
sAlbumID,
|
|
photo_num = "1",
|
|
video_num = "0",
|
|
batch_num = "1"
|
|
}: {
|
|
uin: string,
|
|
group_id: string,
|
|
pskey: string,
|
|
pic_md5: string,
|
|
img_size: number,
|
|
img_name: string,
|
|
sAlbumName: string,
|
|
sAlbumID: string,
|
|
photo_num?: string,
|
|
video_num?: string,
|
|
batch_num?: string
|
|
}
|
|
): {
|
|
control_req: ControlReq[]
|
|
} {
|
|
const timestamp = Math.floor(Date.now() / 1000);
|
|
|
|
return {
|
|
control_req: [
|
|
{
|
|
uin: uin,
|
|
token: {
|
|
type: 4,
|
|
data: pskey,
|
|
appid: 5
|
|
},
|
|
appid: "qun",
|
|
checksum: pic_md5,
|
|
check_type: 0,
|
|
file_len: img_size,
|
|
env: {
|
|
refer: "qzone",
|
|
deviceInfo: "h5"
|
|
},
|
|
model: 0,
|
|
biz_req: {
|
|
sPicTitle: img_name,
|
|
sPicDesc: "",
|
|
sAlbumName: sAlbumName,
|
|
sAlbumID: sAlbumID,
|
|
iAlbumTypeID: 0,
|
|
iBitmap: 0,
|
|
iUploadType: 0,
|
|
iUpPicType: 0,
|
|
iBatchID: timestamp,
|
|
sPicPath: "",
|
|
iPicWidth: 0,
|
|
iPicHight: 0,
|
|
iWaterType: 0,
|
|
iDistinctUse: 0,
|
|
iNeedFeeds: 1,
|
|
iUploadTime: timestamp,
|
|
mapExt: {
|
|
appid: "qun",
|
|
userid: group_id
|
|
},
|
|
stExtendInfo: {
|
|
mapParams: {
|
|
photo_num: photo_num,
|
|
video_num: video_num,
|
|
batch_num: batch_num
|
|
}
|
|
}
|
|
},
|
|
session: "",
|
|
asy_upload: 0,
|
|
cmd: "FileUpload"
|
|
}]
|
|
}
|
|
}
|
|
|
|
export function createStreamUpload(
|
|
{
|
|
uin,
|
|
session,
|
|
offset,
|
|
seq,
|
|
end,
|
|
slice_size,
|
|
data
|
|
|
|
}: { uin: string, session: string, offset: number, seq: number, end: number, slice_size: number, data: string }
|
|
) {
|
|
return {
|
|
uin: uin,
|
|
appid: "qun",
|
|
session: session,
|
|
offset: offset,//分片起始位置
|
|
data: data,//base64编码数据
|
|
checksum: "",
|
|
check_type: 0,
|
|
retry: 0,//重试次数
|
|
seq: seq,//分片序号
|
|
end: end,//分片结束位置 文件总大小
|
|
cmd: "FileUpload",
|
|
slice_size: slice_size,//分片大小16KB 16384
|
|
biz_req: {
|
|
iUploadType: 3
|
|
}
|
|
};
|
|
} |