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

SQL Server Provider

Store uploaded files directly in a SQL Server database. Configure the connection string and table schema.

What you should see: files stored as rows in SQL Server rather than on disk. Only the server-side provider changes — the browser code is identical. Accepts up to 50 MB.
Drag & drop files here, or paste from clipboard
<core-upload asp-upload-url="/api/upload/upload"
 asp-multiple="true"
 asp-progress="true"
 asp-auto-upload="true"
 asp-max-size="50MB">
</core-upload>

<!-- Server-side: store files in SQL Server -->
// In Program.cs
builder.Services.AddCoreUpload(options =>
{
 options.UseStorageProvider<SqlServerStorageProvider>(config =>
 {
 config.ConnectionString =
 builder.Configuration.GetConnectionString("Default");
 config.TableName = "UploadedFiles";
 config.SchemaName = "dbo";
 });
});

// Table schema:
// CREATE TABLE dbo.UploadedFiles (
// Id UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
// FileName NVARCHAR(256) NOT NULL,
// ContentType NVARCHAR(128),
// FileSize BIGINT,
// FileData VARBINARY(MAX),
// CreatedAt DATETIME2 DEFAULT GETUTCDATE()
// );

Storage is an interface

Where files end up is decided by IUploaderProvider, not by the component. Implement SaveAsync, AppendAsync, GetInfoAsync, OpenReadAsync, DeleteAsync and PersistAsync, register it, and uploads land wherever you decide — a database, a network share, an object store. FileSystemProvider is the implementation that ships.

AppendAsync is what makes chunking work

Chunked uploads arrive as a sequence, so the provider has to append rather than overwrite. A database-backed provider therefore needs a column it can append to, or a chunk table it assembles on PersistAsync — writing each chunk as a separate row and never joining them is the mistake to avoid.

Storing files in a database is convenient for transactional consistency and backup, and expensive for large files and for serving. Consider it for documents and metadata; think harder before putting multi-gigabyte video there.