Design Uploads That Survive a Broken Connection
Forms & Inputs · uploads, loading, errors
Updated 2026-08-04
- Send large files in pieces rather than as one transfer. A single stream that fails at ninety percent has to start again, and a chunked one only resends the piece that failed.
- Resume rather than restart, and say which one is happening. Resuming from 84% is the difference between a recoverable interruption and an abandoned upload.
- Keep the selected file after a failure. Asking someone to find a two gigabyte file again is how an upload becomes a support ticket.
- Separate transferring from processing, because they are different waits with different lengths. A video that finishes uploading has not finished being converted, and a progress bar that reaches one hundred percent and then sits there looks stuck.
- Design the processing stage on its own terms:
- Say what is happening, such as transcoding or scanning.
- Give an expectation, even a rough one.
- Let the user leave and be notified.
- Say what is usable now, if a lower quality version is ready first.
- Give every file in a multi-file upload its own progress, status, and retry. One failure must never cancel the other nine.
- Validate size and type before the transfer starts. Rejecting a file after four minutes of uploading is the most avoidable failure in this whole flow.
- Show a thumbnail or a name and size as confirmation of what was received. Users routinely upload the wrong file and only the interface can catch it.
- Handle the duplicate. Uploading the same file twice is common, and detecting it lets you say This file is already here rather than storing it again.
A large upload is a long conversation over an unreliable connection, and the interface earns its keep by never making the user start it over.
Related guides