sequenceDiagram
participant C as Client
participant S as Server
participant R as Remote Storage
C->>S: /mpu/create (path, num_chunks)
opt S3, GCS
S->>R: Start MPU (optional)
R->>S: upload_id (optional)
end
Note over S: Generate pre-signed URLs<br/>for uploading chunks
S->>C: presigned_urls and upload_id
C->>R: Upload chunks using presigned_urls
R->>C: Chunks IDs (e.g. ETag for S3)
C->>S: /mpu/complete (upload_id, chunk_ids)
S->>R: Complete MPU
opt If something went wrong
C->>S: /mpu/abort (path, upload_id)
S->>R: Abort MPU
end