The Convert tab now slices the OVA into 16 MiB chunks and PUTs them
with an offset parameter instead of one multipart POST. Avoids the
temp-file double-copy and tmpfs exhaustion that broke uploads of very
large (>50 GiB) appliances.
- POST /api/uploads creates an upload session, GET/PUT/DELETE manage
a partial file written directly in upload_dir (seek+write, no copy)
- POST /api/jobs now accepts JSON {upload_id, vmid, storage} to
finalize the chunked upload; multipart form path kept for CLI/curl
- Client: File.slice() loop with per-chunk XHR, progress bar driven by
bytes sent / total, partial files resumable via upload_id
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>