原理
通过偏移量来实现断点续传
偏移量Offset
Offset头部变量标志当前上传文件完成的偏移量,Offset为0或者大于0的整型。
请求类型
HEAD
每一次HEAD类型请求,服务器总是会返回offset头部变量,标志当前上传完成的字节数。
PATCH
服务器通过PATCH类型请求接收文件上传的数据。所有PATCH请求必须使用Content-Type: application/offset+octet-stream.
上传节点
上传接口支持断点续传,最大可上传30GB的文件
http上传接口地址统一为http://upload.polyv.net:1080/files/
https上传接口地址统一为https://upload.polyv.net:1081/files/
例子
创建文件
提交空的 POST 请求让服务器端创建一个待上传的文件. 需要在请求的Header增加两个变量:Final-Length和writeToken. 其中Final-Length为文件大小,writetoken是polyv后台的上传授权码。
Request:
POST /files HTTP/1.1 Host: upload.polyv.net Final-Length: 100 writeToken: Y07Q4yopIVXN83n-MPoIlirBKmrMPJu0
Response:
HTTP/1.1 201 Created Location: http://upload.polyv.net:1080/files/sl8da4jjbx28aac52069409bc8f6bf6e_s
Response会返回一个新的上传地址Location附带到Header里面,其中files后面的(sl8da4jjbx28aac52069409bc8f6bf6e_s)则为视频vid。 上传需要附带POST的参数:
标题 title 默认为notitle 标签 tag 默认为空 描述 desc 默认为空 扩展名 ext:(mp4,mov,avi等) 默认为bin 分类 cataid 默认为1,即用户上传空间的分类根目录 时间戳 ts 签名 sign 根据将secretkey和时间戳按照顺序拼凑起来的字符串进行MD5计算得到的小写MD5值 哈希值 hash 根据将时间戳和writeToken按照顺序拼凑起来的字符串进行MD5计算得到的小写MD5值 用户ID userid POLYV账号的用户ID
续传
利用 HEAD request 取得Offset变量,决定从哪个地方恢复上传。下面例子演示从100字节的文件,从第70个字节中断后,继续上传。
Request:
HEAD /files/sl8da4jjbx28aac52069409bc8f6bf6e_s HTTP/1.1 Host: upload.polyv.net
Response:
HTTP/1.1 200 Ok Offset: 70
返回offset为70, 客户端开始用PATCH请求恢复上传剩余的30字节。
Request:
Request:
PATCH /files/sl8da4jjbx28aac52069409bc8f6bf6e_s HTTP/1.1 Host: upload.polyv.net Content-Type: application/offset+octet-stream Content-Length: 30 Offset: 70