原理
通过偏移量来实现断点续传
偏移量Offset
Offset头部变量标志当前上传文件完成的偏移量,Offset为0或者大于0的整型。
请求类型
HEAD
每一次HEAD类型请求,服务器总是会返回offset头部变量,标志当前上传完成的字节数。
PATCH
服务器通过PATCH类型请求接收文件上传的数据。所有PATCH请求必须使用Content-Type: application/offset+octet-stream.
上传节点
上传接口地址统一为http://v.polyv.net:1080/files/
例子
创建文件
提交空的 POST 请求让服务器端创建一个待上传的文件. 需要在请求的Header增加两个变量:Final-Length和writeToken. 其中Final-Length为文件大小,writeToken是polyv后台的上传授权码。
Request:
POST /files HTTP/1.1
Host: v.polyv.net
Final-Length: 100
writeToken: Y07Q4yopIVXN83n-MPoIlirBKmrMPJu0
Response:
HTTP/1.1 201 Created
Location: http://v.polyv.net:1080/files/sl8da4jjbx28aac52069409bc8f6bf6e_s
Response会返回一个新的上传地址Location附带到Header里面,其中files后面的(sl8da4jjbx28aac52069409bc8f6bf6e_s)则为视频vid。 上传需要附带POST的参数:
标题 title 默认为notitle
描述 desc 默认为空
扩展名 ext:(mp4,mov,avi等) 默认为bin
续传
利用 HEAD request 取得Offset变量,决定从哪个地方恢复上传。 下面例子演示从 100 字节的文件,从第70个字节中断后,继续上传。 Request:
HEAD /files/sl8da4jjbx28aac52069409bc8f6bf6e_s
HTTP/1.1
Host: v.polyv.net
Response:
HTTP/1.1 200 Ok
Offset: 70
返回offset为70, 客户端开始用 PATCH 请求恢复上传 : Request:
PATCH /files/sl8da4jjbx28aac52069409bc8f6bf6e_s
HTTP/1.1
Host: v.polyv.net
Content-Type: application/offset+octet-stream
Content-Length: 30
Offset: 70
[剩余的 30 bytes]
Response:
HTTP/1.1 200 Ok
例子源码
iOS 上传源码 https://github.com/easefun/polyv-ios-client-demo
jquery上传源码 https://github.com/easefun/polyv-jquery-client