AjaxUploader ships a zero-dependency tus 1.0 client (Core + Creation + Termination extensions) and a filesystem-backed TusStorage class. Interop with tusd, uppy-companion, or any tus-1.0-compliant server. Works out of the box against the built-in endpoint — no extra wiring beyond registering the ajaxupload.axd handler in web.config.
Resume behaviour: if you reload the page during an upload, the resumed task does a HEAD on the stored tus URL, reads the server's current Upload-Offset, and PATCHes from there. No bytes are re-uploaded.
Client config
AjaxUploader.create('#uploader', {
uploadUrl: '/ajaxupload.axd/upload',
strategy: 'tus',
chunkSize: 5 * 1024 * 1024, // PATCH chunk size
persistState: true,
persistAdapter: 'indexeddb'
// tusEndpoint defaults to `{uploadUrl base}/tus` — override for tusd:
// tusEndpoint: 'https://your-tusd-host/files/'
});
Server-side
The default ajaxupload.axd handler registers the tus routes automatically. No additional code required.
Wire protocol (tus 1.0.0)
OPTIONS /ajaxupload.axd/tus → capabilities (Tus-Version: 1.0.0, Tus-Extension: creation,termination)
POST /ajaxupload.axd/tus → 201 + Location: /ajaxupload.axd/tus/{id}
HEAD /ajaxupload.axd/tus/{id} → current Upload-Offset (used for resume)
PATCH /ajaxupload.axd/tus/{id} ↠bytes with Content-Type: application/offset+octet-stream
DELETE /ajaxupload.axd/tus/{id} → cleanup on cancel / fatal error
Third-party server interop
The same client works against any tus 1.0 server — just point tusEndpoint at it. Tested against tusd and uppy-companion.