TUS協議提供一種基於 HTTP/1.1 和 HTTP/2 機制用於文件斷點續傳。
HEAD
請求用來查詢某個文件上傳進度使用
下面例子中一個文件總共100個Byte,已經傳輸了70個Byte,全部交互內容都在HTTP請求頭中。html
HEAD Request:node
HEAD /files/24e533e02ec3bc40c387f1a0e460e216 HTTP/1.1 Host: tus.example.org Tus-Resumable: 1.0.0
Response:git
HTTP/1.1 200 OK Upload-Offset: 70 Tus-Resumable: 1.0.0
拿到Upload-Offset
, 使用PATCH
方式請求繼續傳輸文件的未完成部分。github
PATCH Request:npm
PATCH /files/24e533e02ec3bc40c387f1a0e460e216 HTTP/1.1 Host: tus.example.org Content-Type: application/offset+octet-stream Content-Length: 30 Upload-Offset: 70 Tus-Resumable: 1.0.0 [remaining 30 bytes]
Response:瀏覽器
HTTP/1.1 204 No Content Tus-Resumable: 1.0.0 Upload-Offset: 100
以上就完成了傳輸。服務器
OPTIONS請求app
主要是獲取協議描述,支持的各類參數,協議細節,其實tus使用Header
來進行服務器和客戶端信息交互,OPTIONS
須要實現兩個Action,一個用於總的協議描述,另外一個能夠獲取到當前文件的上傳進度Offset
。
POST請求ui
當有新文件須要上傳時候,註冊文件信息,文件名,文件大小,這些內容,tus-js-client的文件名是Base64格式的。
HEAD請求url
請求當前文件的服務器信息,返回文件大小和當前進度。
PATCH請求
上傳文件,寫入磁盤系統。
Get請求
下載文件,根據guid
DELETE請求
刪除文件
流程見下圖,不解釋了
客戶端本文使用js-tus-client項目,這個項目本地自行啓動,有node.js環境的,以下:
npm install -g http-server cd html http-server .
而後打開瀏覽器8080端口,就能夠看到頁面了。
Simple.html 是最簡單的一個文件上傳頁面demo。
其餘都是js-tus-client的內容。
tus須要本地瀏覽器中存儲已經上傳的文件信息,這些js-tus-client都已經實現。
https://github.com/freew01f/t...
代碼都在這裏了,這裏就不解釋了,若是你想修改上傳的endpoint地址,你須要在POST方法建立時修改,由於這個url會存在本地瀏覽器中。