Skip to content

Chunked Uploads ​

OxiCloud exposes resumable chunked uploads under /api/uploads. The protocol is TUS-like in spirit, but the concrete API is OxiCloud-specific: create a session, stream chunks with PATCH, inspect progress with HEAD, then finalize the assembled file.

Upload Flow ​

  1. Create an upload session with POST /api/uploads
  2. Upload each chunk with PATCH /api/uploads/{upload_id}?chunk_index=N
  3. Optionally inspect progress with HEAD /api/uploads/{upload_id}
  4. Finalize with POST /api/uploads/{upload_id}/complete
  5. Cancel an in-flight upload with DELETE /api/uploads/{upload_id} if needed

API Endpoints ​

Create upload session ​

http
POST /api/uploads
Content-Type: application/json

{
  "filename": "large-video.mp4",
  "folder_id": "folder-uuid",
  "content_type": "video/mp4",
  "total_size": 524288000,
  "chunk_size": 8388608
}

Typical response:

json
{
  "upload_id": "uuid",
  "chunk_size": 8388608,
  "total_chunks": 63,
  "expires_at": 86400
}

Upload a chunk ​

Chunks are sent as raw bytes, not multipart form uploads.

http
PATCH /api/uploads/{upload_id}?chunk_index=0&checksum=md5-hex
Content-Type: application/octet-stream
Content-MD5: md5-hex

<binary chunk bytes>

Notes:

  • chunk_index is required and zero-based
  • checksum is optional and can also be supplied with the Content-MD5 header
  • Successful responses include progress headers such as Upload-Offset, Upload-Progress, and Upload-Complete

Inspect upload status ​

http
HEAD /api/uploads/{upload_id}

The response includes upload metadata in headers such as:

  • Upload-Offset
  • Upload-Length
  • Upload-Progress
  • Upload-Chunks-Total
  • Upload-Chunks-Complete

Finalize upload ​

http
POST /api/uploads/{upload_id}/complete

Successful responses return the created file metadata:

json
{
  "file_id": "uuid",
  "filename": "large-video.mp4",
  "size": 524288000,
  "path": "/Videos/large-video.mp4"
}

Cancel upload ​

http
DELETE /api/uploads/{upload_id}

This removes the in-progress session and temporary chunk data.

Validation Rules ​

  • filename is required
  • total_size must be greater than zero
  • chunk_size must be at least 1 MB when provided
  • Storage quota checks can reject the session before upload starts

Frontend Behavior ​

The OxiCloud web UI can switch to chunked uploads for larger files, track aggregate progress, and retry individual chunks without restarting the full transfer.

Released under the MIT License.