What Are Multipart Uploads and Resumable Transfers?
Why Single PUT Fails at Scale
A single HTTP PUT request must complete or fail atomically. Uploading a 10GB file over a 100 Mbps connection takes 13+ minutes. Any network hiccup during those 13 minutes fails the entire upload. The client must start over, wasting bandwidth and time. For unstable connections or very large files, single PUT is practically unusable.
Multipart uploads eliminate this fragility. Each part is a separate HTTP request. A 10GB file split into 100MB parts becomes 100 independent uploads. Each takes about 8 seconds. Network failure during part 47 means retrying 8 seconds of work, not 13 minutes.
The Three Phase Protocol
Phase 1 - Initiate: Client requests to start a multipart upload. Server returns an upload ID (a unique identifier for this upload session). All subsequent parts reference this ID.
Phase 2 - Upload Parts: Client uploads each part with the upload ID and a part number (1, 2, 3...). Parts can upload in any order, in parallel. Server stores each part separately and returns an ETag (a hash of the part content) for each.
Phase 3 - Complete: Client sends the list of part numbers and their ETags. Server validates all parts exist, assembles them in order, and creates the final object. The upload ID becomes invalid.
Resumable Transfers
Because the server tracks parts by upload ID, uploads survive client restarts. The client stores the upload ID and which parts completed. After a crash, it queries the server for completed parts, then uploads only the missing ones. This is true resumability: close your laptop, reopen tomorrow, continue from where you stopped.