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--