ASP.NET Core Integration
Complete guide to integrating CoreUpload into your ASP.NET Core application with middleware, Tag Helpers, and provider configuration.
Middleware Setup
Register CoreUpload in your ASP.NET Core pipeline. The middleware handles upload requests, chunk assembly, and file processing automatically.
var builder = WebApplication.CreateBuilder(args);
// Register CoreUpload services with configuration
builder.Services.AddCoreUpload(options =>
{
options.TempDirectory = Path.Combine(
builder.Environment.ContentRootPath, "uploads", "temp");
options.MaxFileSizeBytes = 100L * 1024 * 1024; // 100 MB
options.AllowedExtensions = new[] { ".jpg", ".png", ".gif", ".pdf", ".zip" };
options.EnableResume = true;
});
builder.Services.AddRazorPages();
var app = builder.Build();
// Add CoreUpload middleware to the pipeline
app.UseCoreUpload();
app.UseStaticFiles();
app.UseRouting();
// Map CoreUpload API endpoints
app.MapCoreUploadEndpoints();
app.MapRazorPages();
app.Run(); Tag Helper Registration
Register the CoreUpload Tag Helpers in your _ViewImports.cshtml file to make them available across all Razor Pages.
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, CoreUpload Then use the Tag Helper in any Razor Page:
<core-upload asp-upload-url="/api/upload/upload"
asp-extensions=".jpg,.png,.gif,.pdf,.docx,.zip"
asp-max-size="50MB"
asp-multiple="true"
asp-drop-zone="true"
asp-progress="true"
asp-thumbnails="true">
</core-upload> JavaScript API (50+ Methods)
CoreUpload exposes a rich JavaScript API with 50+ public methods for programmatic control. Subscribe to events, manipulate the queue, read file metadata, compute hashes, process images, and build completely custom upload workflows. v5.0 adds convenience aliases and per-task callbacks for a streamlined developer experience.
// Get an existing uploader instance by ID or CSS selector
var uploader = CoreUpload.getInstance('#myUploader');
// Convenience methods (v5.0)
uploader.browse(); // Open file dialog programmatically
uploader.pause(); // Pause all uploads (alias for pauseAll)
uploader.resume(); // Resume uploads (alias for resumeAll)
uploader.cancel(); // Cancel all uploads (alias for cancelAll)
uploader.clear(); // Clear the queue (alias for reset)
uploader.retry(); // Retry failed uploads (alias for retryFailed)
uploader.getFiles(); // Get all tasks in the queue
uploader.getOptions(); // Get current configuration options
// Per-task callbacks (v5.0)
var uploader = new CoreUpload('#myUploader', {
onFileAdded: function(task, uploader) {
console.log('Added: ' + task.name + ' (' + task.size + ' bytes)');
},
onProgress: function(task, percent, loaded, total, uploader) {
console.log(task.name + ': ' + percent + '%');
},
onChunkComplete: function(file, chunkIndex, totalChunks, uploader) {
console.log('Chunk ' + (chunkIndex + 1) + '/' + totalChunks);
},
onComplete: function(task, result, uploader) {
console.log('Complete: ' + task.name);
},
onError: function(task, errorMessage, uploader) {
console.error('Error: ' + task.name + ' - ' + errorMessage);
},
onCancel: function(file, task, uploader) {
console.log('Cancelled: ' + file.name);
},
onRetry: function(file, chunkIndex, attempt, uploader) {
console.log('Retry attempt ' + attempt);
},
onQueueComplete: function(completedFiles, uploader) {
console.log('All done! ' + completedFiles.length + ' files uploaded.');
}
});
// UploadTask properties: task.name, task.size, task.type (aliases)
// Image processing
CoreUpload.resizeImage(file, { maxWidth: 1920, quality: 0.85 });
CoreUpload.readExifData(file); // Read EXIF metadata
CoreUpload.computeSHA256(file); // Compute SHA-256 hash
CoreUpload.detectMimeType(file); // Detect MIME via magic bytes Chunked Upload Configuration
Enable chunked uploading for large files. The uploader splits files into smaller chunks, uploads them sequentially, and reassembles them on the server. Failed chunks are automatically retried.
<core-upload asp-upload-url="/api/upload/upload"
asp-chunked="true"
asp-chunk-size="5242880"
asp-max-size="2GB"
asp-multiple="true"
asp-progress="true">
</core-upload> Server-side configuration for chunked uploads:
builder.Services.AddCoreUpload(options =>
{
options.ChunkSizeBytes = 5 * 1024 * 1024; // 5 MB per chunk
options.EnableResume = true;
options.TempDirectory = Path.Combine(
builder.Environment.ContentRootPath, "uploads", "chunk-temp");
options.MaxFileSizeBytes = 2L * 1024 * 1024 * 1024; // 2 GB
}); Provider Configuration
CoreUpload ships with a file-system provider by default and lets you swap in a custom IUploaderProvider for database or cloud-backed storage.
Default File-System Storage
Use the built-in provider to store uploads on the local file system or a network share.
builder.Services.AddCoreUpload(options =>
{
options.TempDirectory = Path.Combine(
builder.Environment.ContentRootPath, "uploads", "temp");
options.MaxFileSizeBytes = 250L * 1024 * 1024;
}); Custom Provider Registration
Swap in your own IUploaderProvider implementation for SQL Server, Azure Blob Storage, S3, or any other backing store.
using CoreUpload.Providers;
builder.Services.AddCoreUpload(options =>
{
options.TempDirectory = Path.Combine(
builder.Environment.ContentRootPath, "uploads", "temp");
});
builder.Services.AddSingleton<IUploaderProvider, SqlServerUploadProvider>();