# 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 ``` 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.