tus 1.0 resumable uploads
MultipleUpload ships a zero-dependency tus 1.0 client (Core + Creation + Termination extensions). It interops with any tus-1.0 server - tusd, uppy-companion, transloadit, your own. Resume survives reloads by reading Upload-Offset from the server via HEAD and continuing the PATCH stream from there.
Live against tusd's public demo. The uploader below points at
https://tusd.tusdemo.net/files/, a free public tus server. Try a large file; reload the page mid-upload and watch it resume from where it left off.
Client configuration
new MultipleUpload('#uploader', {
strategy: 'tus',
tusEndpoint: 'https://tusd.tusdemo.net/files/',
chunkSize: 5 * 1024 * 1024, // PATCH chunk size
persistState: true,
persistAdapter: 'indexeddb' // resume HEAD+PATCH across reloads
});Self-hosted tus server (tusd)
# Run tusd locally with filesystem storage docker run -d --name tusd -p 1080:1080 \ -v $(pwd)/uploads:/srv/tusd-data/data \ tusproject/tusd:latest -behind-proxy -hooks-dir /srv/tusd-hooks # Point the client at it: # tusEndpoint: 'http://localhost:1080/files/'
Wire protocol (tus 1.0.0)
OPTIONS {endpoint}-> capabilities (Tus-Version: 1.0.0,Tus-Extension: creation,termination)POST {endpoint}->201+Location: {endpoint}{id}(Creation extension)HEAD {endpoint}{id}-> currentUpload-Offset(used for resume)PATCH {endpoint}{id}<- bytes withContent-Type: application/offset+octet-streamDELETE {endpoint}{id}on cancel / fatal error (Termination extension)
Upload metadata (filename, filetype) is sent via the Upload-Metadata header as comma-separated base64-encoded key-value pairs - the client handles this for you.