File uploads use FormData with multipart/form-data encoding.
You can upload single files, multiple files, or files with additional form fields.
For progress tracking, you need to use XMLHttpRequest since
the Fetch API doesn't support upload progress (only download).