tus - Resumable File Uploads

Resumable File Uploads

tusというHTTP/1.1上で再開可能なファイルアップロードの規格を策定するプロジェクトを見つけた。2013年4月に始まった取り組みで、リファレンス実装が多い。提案されているプロトコルでのアップロードの流れをメモする(v0.2.1準拠)

初期化(File Creation)

空のPOSTリクエストでファイルを作成する。Entity-Length ヘッダはファイル全体の長さを表す。

リクエスト
POST /files HTTP/1.1
Host: tus.example.org
Content-Length: 0
Entity-Length: 100
レスポンス

新規に作成されたリソースのURIがLocationに乗って201が返ってくる。

HTTP/1.1 201 Created
Location: http://tus.example.org/files/24e533e02ec3bc40c387f1a0e460e216

アップロード

HEADリクエストで、どこまでアップロードされているかを取得する(Offsetヘッダ)

リクエスト
HEAD /files/24e533e02ec3bc40c387f1a0e460e216 HTTP/1.1
Host: tus.example.org
レスポンス
HTTP/1.1 200 Ok
Offset: 70
リクエスト

オフセット70バイトからPATCHメソッドでアップロードする

PATCH /files/24e533e02ec3bc40c387f1a0e460e216 HTTP/1.1
Host: tus.example.org
Content-Type: application/offset+octet-stream
Content-Length: 30
Offset: 70

[remaining 30 bytes]
レスポンス
HTTP/1.1 200 Ok

その他

チェックサム、並列チャンク、メタデータ、ストリームについてこれから定義予定らしい。

ファイル作成がPOSTで示されているけど、PUTでリソース指定したい時とか、リソースを更新したい時はどうするんだろうなと思った。暇があったらもうちょっと調べる。