AjaxUploader 5.0 ships everything a modern upload UX needs: six transport strategies, IndexedDB-backed resume, an inline image editor, Web Worker hashing, and the CuteWebUI 4.x shim so existing pages keep compiling.
Transport
One Strategy property selects the transport. Switch from server-side chunked upload to direct-to-S3 multipart without rewriting your upload flow. Register your own transport through AjaxUploader.registerStrategy().
Strategy
AjaxUploader.registerStrategy()
single
Traditional multipart/form-data POST — ideal for small files and simple forms.
multipart/form-data
chunked
Splits the file into parts, uploads with parallel concurrency, per-chunk retry with exponential backoff, and server-side assembly.
s3
Browser uploads each part directly to Amazon S3 (or MinIO, Backblaze B2, Cloudflare R2, Wasabi) via your server-signed presigned URLs. Your server never sees the bytes.
azure
PutBlock + PutBlockList against a pre-signed blob SAS URL. Same pattern as S3 — client does all the work, server just signs.
tus
Zero-dependency tus 1.0 client with Core + Creation + Termination extensions. Interop with tusd, uppy-companion, and any tus server.
urlImport
Paste a URL; the server fetches it and streams through your provider. Client sees live NDJSON progress events during the fetch.
Resume & reliability
Every in-flight upload persists to IndexedDB automatically. When the user returns, the task rehydrates with its strategy, server-side session handles (tus URL, S3 part ETags, chunk offsets), and progress intact — then continues from where it stopped.
Pluggable adapter: localStorage (metadata only) or indexeddb (metadata + File blobs).
localStorage
indexeddb
chunked, s3, tus all continue mid-upload. Call resumeFromState() and the task picks up its old server session.
resumeFromState()
Configurable ChunkConcurrency keeps the pipe full. Per-chunk retry with exponential backoff.
ChunkConcurrency
Sliding-window speed average, per-file and overall progress, ETA, and chunk-level visualization in custom UIs.
SHA-256 and CRC32 run off the main thread. Gigabyte hashing without UI jank, with CSP-safe main-thread fallback.
Per-task and batch-wide controls with an AbortController hooked into every XHR and fetch.
AbortController
Input & UI
Drag-and-drop is table stakes. AjaxUploader adds folder traversal, full-page drop overlay, clipboard paste, server URL import, and an inline image editor with interactive crop — all through a single API.
Styled drop zones with hover feedback, configurable full-page drop overlay, and per-zone file scoping.
Dropping a folder recursively enumerates files and preserves relative paths. Works in every modern browser.
Paste screenshots or copied files directly into the uploader. One-line config enables paste anywhere on the page.
Rotate ±90°, flip H/V, interactive crop with 8 drag handles, optional aspect-ratio lock. Touch + mouse.
Client-side thumbnails for images, video, audio, and PDFs. Built-in lightbox preview for gallery layouts.
Resize, compress, rotate, crop, flip, watermark, and auto-orient via EXIF — all client-side before the upload starts.
Every user-facing string is localized. Ships with several locales; registering your own is one object literal.
Default, Bootstrap, Tailwind, and dark-mode themes out of the box. CSS variables expose every color + radius + spacing.
Rich event model with onBeforeUpload, onTaskProgress, chunkComplete, and more — plug into external progress bars, queue tables, or wizards.
onBeforeUpload
onTaskProgress
chunkComplete
Validation & security
Client-side validation saves bandwidth and gives instant feedback; server-side re-validation enforces the truth. AjaxUploader wires both.
Allowlist extensions and MIME types. Optional magic-byte sniffing reads the first 16 bytes to catch spoofed extensions.
Min/max file size, min/max image width + height enforced before any bytes transfer.
Reject duplicate files in the queue by name + size, or by content hash.
SHA-256 or CRC32 computed client-side in a Web Worker, sent to the server for de-dup, integrity, or signature workflows.
First-class support for __RequestVerificationToken and ASP.NET Core antiforgery across all strategies.
__RequestVerificationToken
Post-upload FileUploaded event gives you the file path before it's persisted — run ClamAV, Defender, or any scanner before accepting.
FileUploaded
Architecture
Web Forms teams get drop-in server controls; power users can swap the storage provider, register strategies, or author their own transports.
The primary server control. Renders the client, wires postback events, exposes UploadedFiles in code-behind.
UploadedFiles
Standalone drop-zone variant for layouts where the button belongs elsewhere on the page.
Attachments-style control for email composers, ticket forms, and reply screens. Preloaded-file support included.
Swap storage without touching UI: FileSystemProvider ships in-box; plug in your own for S3/Azure/DB/CDN.
FileSystemProvider
Thin interfaces the direct-to-cloud endpoints dispatch to. No AWS/Azure SDK bundled in the core assembly — your host plugs in the signer.
Filesystem-backed TusStorage with Core + Creation + Termination extensions. Hands off to the upload pipeline on completion.
TusStorage
Single IHttpHandler serves embedded JS/CSS and routes upload, chunk, s3, azure, tus, and import-url endpoints.
IHttpHandler
Legacy namespace + compatibility assembly so existing 4.x pages keep compiling. Migrate to native v5 at your own pace.
One canonical JavaScript source shared with CoreUpload (ASP.NET Core) and MultipleUpload (standalone). Branded at build time.
101 ready-to-run demos ship with the download package. Open AjaxUploader.Demos.csproj in Visual Studio, hit F5, and every feature on this page has a working sample page to learn from.
AjaxUploader.Demos.csproj