FileUpload - Handle Files
Set up The FileUpload
Smart.FileUpload is a custom input element that allows uploading one or multiple files.
Add the FileUpload component to the Pages/Index.razor file. Set the UploadUrl property to the URL of the server-side upload handler:
@inject NavigationManager navigationManager;
<FileUpload Multiple DropZone="true" UploadUrl="@($"{navigationManager.BaseUri}api/fileupload")"></FileUpload>
Create File Upload Controller
To handle the uploaded files, first create a "Controllers" folder. Inside create a new file called FileUploadController.cs
The FileUpload sends the selected files as part of a IFormCollection.
The following code creates a controller that will save the uploaded files in the "wwwroot/uploads" directory:
using Microsoft.AspNetCore.Mvc;
namespace MyBlazorApp.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class FileUploadController : ControllerBase
{
[HttpPost]
public async Task<IActionResult> UploadFiles([FromForm] IFormCollection form)
{
if (form.Files.Count == 0)
{
return BadRequest("No files uploaded.");
}
var uploadsFolder = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/uploads");
// Ensure the uploads directory exists
if (!Directory.Exists(uploadsFolder))
{
Directory.CreateDirectory(uploadsFolder);
}
foreach (var file in form.Files)
{
var filePath = Path.Combine(uploadsFolder, file.FileName);
// Save the file
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
return Ok($"{form.Files.Count} files uploaded successfully.");
}
}
}
In order for the Controller to be called correctly, make sure the following services are registered in the Program.cs file:
builder.Services.AddControllers(); //..... app.UseRouting(); app.MapControllers();
We can now see that the uploaded files are saved successfully in the wwwroot/uploads directoy of our App: