Direct-to-S3 / Azure tus 1.0 resume IndexedDB Golden Retriever 20 locales Webcam & screen capture

Modern file uploads for ASP.NET Core,
built for production.

CoreUpload is a drop-in Tag Helper + Razor component with 7 transport strategies (chunked, direct-to-S3, Azure Blob, GCS resumable, tus 1.0, URL import, single POST), 4 cloud-source pickers (Drive, Dropbox, OneDrive, Box), AES-GCM encryption-at-rest, offline-mode queueing, inline image annotation + 5 image presets + HEIC auto-convert, pre-upload virus-scan hook, cross-tab coordination, drag-to-reorder queue, and 30 built-in locales (incl. RTL Arabic + Hebrew) - all wired into ASP.NET Core middleware with zero external dependencies on AWS, Azure, or Google SDKs in the core library.

7 Transport strategies
30 Built-in locales (incl. RTL)
119 Live demos shipped
0 Required runtime deps
Direct-to-S3 multipart with resume
CoreUpload v5 upload UI

Trusted by teams at

Sony
Intel
Nokia
Siemens
IBM
Microsoft

Transport

Seven upload strategies, one API.

Switch from chunked POST to direct-to-S3 multipart, GCS resumable, or tus 1.0 without rewriting your upload flow. Register your own transport via CoreUpload.registerStrategy().

single

One POST

Traditional multipart/form-data POST. Ideal for small files and simple forms.

chunked

Server-side chunked

Splits file into parts, uploads with parallel concurrency, per-chunk retry with exponential backoff, and server-side assembly.

s3

Direct-to-S3 multipart

Browser uploads each part directly to Amazon S3 (or MinIO, Backblaze B2, Cloudflare R2, Wasabi) via your server-signed presigned URLs. Server never sees the bytes.

azure

Direct-to-Azure Blob

PutBlock + PutBlockList against a pre-signed blob SAS URL. Same pattern as S3 - client does the work, server just signs.

tus

tus 1.0 protocol

Zero-dependency tus 1.0 client with Core + Creation + Termination extensions. Interop with tusd, uppy-companion, and any tus server.

gcs NEW 5.1

Direct-to-GCS resumable

Google Cloud Storage resumable upload protocol. Server initiates the session via IGcsSigner; browser PUTs chunks with Content-Range headers. 256 KiB grain auto-aligned. Bytes never traverse Kestrel.

urlImport

Server URL import

Paste a URL; the server fetches and streams through your IUploaderProvider. Client sees live NDJSON progress events during the fetch.

What's new in 5.1

15 new capabilities

The biggest release since the v5 platform launch.

Cloud-source pickers, encryption-at-rest, offline queueing, inline annotation, virus-scan integration, cross-tab coordination, GCS resumable, 10 new locales, and more. All additive - no breaking changes from 5.0.

Cloud sources
Google Drive . Dropbox . OneDrive . Box

Built-in OAuth pickers, lazy-loaded. Each adapter resolves with RemoteFile[] handed to the URL-import pipeline with NDJSON live progress.

Compliance
Encryption-at-rest (AES-GCM-256)

PBKDF2 (200k iter), per-file salt + IV. Kestrel only ever sees ciphertext. Decryption recipe in .NET 8 with AesGcm ships in the docs.

Compliance
Pre-upload virus scan

One virusScan hook integrates ClamAV / VirusTotal / Defender. Rejected files never reach storage.

Resilience
Offline-first queueing + SW

Files queue to IndexedDB while offline; uploads auto-resume when the connection returns. Register a Service Worker for background sync.

Image pipeline
HEIC + 5 presets + annotation

iPhone HEIC auto-converts to JPEG. 5 presets bundle resize + crop + auto-orient. Inline 6-tool markup (pen/arrow/rect/text/blur/eraser) before upload.

Composable UI
StatusBar + Informer + multi-tab dashboard

Extractable progress chrome you can mount anywhere on your page. Cross-tab coordination + a "manager tab" can aggregate every tab's uploads.

UX
Drag-to-reorder + keyboard

enableQueueReorder lets users drag pending tasks - Arrow Up/Down for keyboard accessibility (WCAG 2.1). Mobile cameraCapture for direct camera launch.

i18n
30 locales (10 new)

+ SV, NO, DA, FI, HU, RO, BG, EL, BN, UK in 5.1. Arabic and Hebrew with right-to-left. Pairs with RequestLocalizationOptions for auto-detection.

Resilience
Custom retry policy + bandwidth cap

Pluggable retryPolicy for Retry-After / jitter / budgets. maxUploadBytesPerSecond for fair bandwidth use.

Capabilities

Production-grade upload platform.

Not a file-input replacement - an upload toolkit that handles the hard parts so you can focus on your application.

Batch file selection

IndexedDB-backed resume

Every in-flight upload persists to IndexedDB. Tab crashes, page reloads, network blips - the resumed task picks up its server session (tus URL, S3 part ETags, chunk offsets) and continues from where it stopped.

Drag and drop

Parallel chunks + Web Workers

Configurable chunk concurrency keeps the pipe full. SHA-256 and CRC32 hashing runs off-thread - gigabyte files no longer block the UI, with a CSP-safe main-thread fallback.

Image editor

Inline image editor

Rotate +/-90 deg, flip H/V, interactive crop with 8 drag handles and optional aspect-ratio lock. Layered on the existing client-side resize, compress, and watermark pipeline.

Drag and drop

Every input source

Drag-and-drop, full-page drop overlay, folder traversal, clipboard paste, and server URL import with live NDJSON progress - all through a single API.

Validation

Multi-layer validation

Extensions, MIME types with magic-byte sniffing, file sizes, image dimensions, duplicate detection, and custom rules - enforced client-side and re-checked server-side.

UI customization

Theme-ready, i18n-ready

Default, Bootstrap, Tailwind, and dark-mode themes. CSS variables expose every color + radius + spacing. Every user-facing string localized; register your own locale in one literal.

ASP.NET Core native

Built the Core way.

DI, minimal APIs, Tag Helpers, and IFormFile-compatible streaming. Targets .NET 8 and newer.

DI + Tag Helpers + Razor

services.AddCoreUpload(), app.MapCoreUploadEndpoints(), and <core-upload> Tag Helper. Everything composes with your existing pipeline.

Pluggable providers

IUploaderProvider, IS3Signer, IAzureSigner, IGcsSigner - no AWS, Azure, or Google SDK bundled. Your host plugs in the signer, the library stays dependency-light.

Kestrel & IIS

Run directly on Kestrel or behind IIS reverse proxy. Linux and Windows containers fully supported - no platform-specific workarounds.

Quick start

Tag Helper on a Razor page - you're done.

Register the services, map the endpoints, drop the Tag Helper. Advanced configuration (strategies, resume, image editor) is on the JS instance that the Tag Helper renders.

Program.cs & Page.cshtml

// Program.cs
builder.Services.AddCoreUpload();
// For direct-to-S3 / Azure (no AWS/Azure SDK bundled - provide your own signer)
builder.Services.AddSingleton<IS3Signer, MyS3Signer>();
builder.Services.AddSingleton<IAzureSigner, MyAzureSigner>();

var app = builder.Build();
app.MapCoreUploadEndpoints();

<!-- Page.cshtml -->
<core-upload asp-upload-url="/api/upload/upload"
 asp-extensions=".jpg,.png,.gif,.pdf,.docx"
 asp-max-size="500MB"
 asp-multiple="true"
 asp-auto-upload="true" />

Advanced: direct-to-S3 + IndexedDB resume

// Select the strategy + persistence on the rendered instance
CoreUpload.create('#uploader', {
 uploadUrl: '/api/upload/upload',
 strategy: 's3', // or 'chunked', 'azure', 'tus', 'urlImport' chunkSize: 5 * 1024 * 1024,
 chunkConcurrency: 4,
 persistState: true,
 persistAdapter: 'indexeddb',
 persistBlobs: true // survive tab crashes without re-picking files
});

Install via NuGet: dotnet add package CoreUpload

Uploader family

Same core, every stack.

All three products ship from one canonical JavaScript source with a shared wire protocol. Pick the server flavor for your application.

Test it in your own application

Download the package, drop the Tag Helper into a Razor page, and see uploads working in under five minutes.