API - 微云

时间:2021-03-21 20:16:22

API - 微云

1. 接口说明

文件上传申请,成功会返回实际上传的地址。

根据申请上传返回的地址,组织数据上传。

1.1 URL

OAuth2.0协议: https://graph.qq.com/weiyun/upload_file

OAuth1.0协议: http://openapi.qzone.qq.com/weiyun/upload_file

1.2 格式

JSON

1.3 HTTP请求方式

GET

1.4 输入参数说明

各个参数请进行URL编码,编码时请遵守RFC 1738

a) 通用参数

OAuth2.0协议必须传入的通用参数,详见这里

OAuth1.0协议必须传入的通用参数,详见这里

b) 私有参数

appid: 第三方接入ID

sha : 待上传文件对应的SHA1的值(使用SHA1算法)

md5 : 待上传文件对应的MD5值

size : 文件大小,单位为字节

name : 文件名,字符串(中文名称用UTF8格式编码,文件名规则跟windows系统一样,文件名中不能包括下列字符 \ / : * ? ” < > | )

upload_type:上传类型,可选。control:控件上传(默认),normal:普通http上传。数据的上传方式一定要填写正确,不然不能正确上传,因为不同的上传方式,返回的上传服务器是不一样

1.5 请求示例

以OAuth2.0协议为例(敏感信息都用*号进行了处理,实际请求中需要替换成真实的值):

https://graph.qq.com/weiyun/put?

access_token=*************&

oauth_consumer_key=12345&

openid=****************

1.6 返回参数说明

ret: 操作结果,参见“返回错误码具体含义”

file_id:待上传文件的文件ID(68字节长度的字符串)

sum:上传校验码,字符串(最大348字节)

port:上传服务器端口

host: 上传服务器地址或者域名

1.7 返回码说明

0: 正确返回

1013: 存储平台系统繁忙

1014: 业务内部错误

1015: 在存储平台创建用户失败

1016: 存储平台不存在该用户

1019: 目录不存在

1022: 文件已经存在

1023: 上传文件时,索引创建成功,上传地址获取失败,客户端需要发起续传

1025: 访问bitmap失败

1026: 父目录不存在

1028: 目录或者文件数超过总限制

1029: 单个文件大小超限

1051: 当前目录下已经存在同名文件

1053: 用户剩余空间不足

1057: 续传时源文件已经发生改变

1071: oidb 数据库访问失败

1072: oidb 数据头部校验失败

1076: 非法文件,文件在黑名单中

1078: 用户不在白名单中

20008: 接入服务内部错误

20014: 该APPID不存在

20015: 认证key错误

30003: 缓冲区长度不够

100003: 文件的SHA值无效

100004: 文件的MD5值无效

100006: 内存溢出

100009: 内部通讯错误

100013: 初始化ptlogin失败

100014: ptlogin验证失败

100017: appid无效

100018: 上传类型无效

100019: 父目录无效

1.8 正确返回示例

JSON示例:

{
"data": {
"csum": "32e5cdf9c5452488c92180d0b03b5b04335b3b09b9f057f2313e996b340ca7f425176d9dc89401c3fddc0f7cec6b96c65b9c287b76891b3f51e89871e21470dc39ef3098923bba74288fb65ba97b2b5ff7cc21460fe3d8a295c629c9d64de9e7fbcae2dc43f375151741d0ad82a42b9c3eaa6282f943ee378e3ef2e380a2c5d22dd0504b3448ddff470b346ef1dd55b0e4d98b51f3859ed74da81d43ff68d59d61def6c08ed98d9bdd8c18de89fce6907d301446cd8029ea7c6328d78cf892b4ed9e08cee74561cf27f1196ac13c2e6468ad6706b0c6b5bb78f2cc6d9d6ba9864167214f10020c4347cc9cc81b21006b54f91e8cfb9c8a6df850199e8794fa28ec1a4d78d4e9ed8208bd40836618eb3ab13d7f5840d31cfa0932768d599d1696f8b25c60a2389e28b75ed4af0d014255",
"file_id": "8fb2cfad-67a9-49a8-b6b1-40014b57dbd7",
"host": "hz.qqdisk.ftn.qq.com",
"port": 80
},
"ret": 0
}

1.9 错误返回示例

{
"data": {
"file_attr": "3",
"file_ctime": "1970-01-16 20:13:29 458",
"file_cur_size": "0",
"file_id": "bb58fc0e-af02-454b-81ed-c1dfcecfa596",
"file_md5": "076e3caed758a1c18c91a0e9cae3368f",
"file_name": "d1.jpg",
"file_sha": "f5f8ad26819a471318d24631fa5055036712a87e",
"file_size": "879394",
"pdirkey": "4b7c321637e8951db1089abfc006961",
},
"ret": 1051
}

2. 数据上传协议说明

2.1 普通http上传

即文件内容。

上传由HTTP标准协议上传。

a) POST

格式:

HTTP头部 起始TAG对 文件内容 结束TAG对

HTTP头部字段描述

字段描述 长度/类型 值定义/备注
ver   未使用
ukey 608字节 上传申请获取的uploadkey
filekey 40字节 未使用,可填任意内容
boundary   后续要用的boundry,详见后述

起始TAG部分字段描述

字段描述 长度/类型 值定义/备注
Filename   上传的本地文件名
Mode   上传模式。如果是flash上传值为flashupload
Uin   上传用户QQ号
resp_charset   回应编码类型
appid   业务号(目前未使用)
sid   未使用
t   未使用

结束TAG部分字段描述

字段描述 长度/类型 值定义/备注
Upload   "Submit Query"

b) Get

GET /crossdomain.xml

填充示例描述

POST http://dts.xa.ftn.qq.com/ftn_handler/?ver=12345&ukey=4bb9288183515aa6d2d2b101c7b9230e3d33e2df144740372a349768bc9538b386b24f84b6e538eef9854628aaa175fa5a3169600d17b349327c226428d930d1eec4685123593bf6ab3e1c5b4147f364d494e965ed4f1c989e8a02877baa01dd4c62ade3a94daa77bc3f926a87285e7a1586ffd672f4bcc2d7019f893b6e5d70d5cbacfdd373b5a32ec5224dc5ec5fc03d4bf093740e3fea8d9ca4c62becc0cb15927a0562d6b3bbc6419b837f0b1b7f0c5fe2c804234a387a86b5e269eb63b37bd2a5fdafb4d18f0103df1632fba82689a18304e9701041f5213b6b1ceb7f89beaa859bd2fc41573ea934cb00a591231969e09e7de7041254126997ac07fb07e075cbd848f15f95f1277d3a88f44defc105e98d539c3efffa135f8e2aac15ea6089cf73d8a6f2cbf46314698dfaa907&filekey=000000006be10f39d4bf46a59c3313a150406ec2& HTTP/1.1

Accept: text/*

Content-Type:multipart/form-data;boundary=------------ei4Ij5Ef1ae0ae0Ij5Ij5Ij5Ij5GI3

User-Agent: Shockwave Flash

Host: dts.xa.ftn.qq.com

Content-Length: 1049

Connection: Keep-Alive

Pragma: no-cache

Cookie:lv_irt_id=1f718c87244cb1986cb165b0af488940; ptisp=ctc

------------ei4Ij5Ef1ae0ae0Ij5Ij5Ij5Ij5GI3 起始TAG(boundary)

Content-Disposition: form-data; name="Filename"

test.txt

------------ei4Ij5Ef1ae0ae0Ij5Ij5Ij5Ij5GI3

Content-Disposition: form-data; name="mode"

flashupload

------------ei4Ij5Ef1ae0ae0Ij5Ij5Ij5Ij5GI3

Content-Disposition: form-data; name="uin"

346972813

------------ei4Ij5Ef1ae0ae0Ij5Ij5Ij5Ij5GI3

Content-Disposition: form-data; name="resp_charset"

UTF8

------------ei4Ij5Ef1ae0ae0Ij5Ij5Ij5Ij5GI3

Content-Disposition: form-data; name="appid"

2

------------ei4Ij5Ef1ae0ae0Ij5Ij5Ij5Ij5GI3

Content-Disposition: form-data; name="sid"

4G2t6Io2uxVAMydp

------------ei4Ij5Ef1ae0ae0Ij5Ij5Ij5Ij5GI3

Content-Disposition: form-data; name="t"

exs_ftn_uploadaction

------------ei4Ij5Ef1ae0ae0Ij5Ij5Ij5Ij5GI3

Content-Disposition: form-data; name="file"; filename="test.txt"

Content-Type: application/octet-stream 以下为实际上传内容

this is for test 此部分为实际上传的文件内容

------------ei4Ij5Ef1ae0ae0Ij5Ij5Ij5Ij5GI3 结束TAG

Content-Disposition: form-data; name="Upload"

Submit Query

------------ei4Ij5Ef1ae0ae0Ij5Ij5Ij5Ij5GI3--