原理
通過偏移量來實現斷點續傳
偏移量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