Con la release 2 di ASP.NET MVC, eseguire l'upload di un file è un'operazione estremamente semplice. Innanzitutto il primo passo da compiere è quello di dotare la View del codice HTML necessario ad effettuare l'upload:
<form action="" method="post" enctype="multipart/form-data"> <label for="file">File:</label> <input type="file" name="file" id="file" /> <input type="submit" value="Invia" /> </form>
Supponendo di voler salvare il file caricato nella cartella /App_Data/Uploads, la controparte di codice del controller sarà
[HttpPost] public ActionResult Upload(HttpPostedFileBase file) { if (file != null && file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(Server.MapPath("~/App_Data/Uploads"), fileName); file.SaveAs(path); } return View(); }
Come possiamo notare, abbiamo utilizzato il tipo HttpPostedFileBase come parametro di input dell'action method. Si tratta di una novità rispetto alla precedente release: ASP.NET MVC 2, infatti, introduce il value provider HttpFileCollectionValueProvider che fornisce i file caricati al model binder di default, semplificando quindi l'intero processo.
Un altro aspetto da segnalare è che, nella action mostrata in precedenza, il nome del parametro file corrisponde al valore dell'attributo name del controllo HTML contenuto nella View.
Si tratta di un'ulteriore facilitazione del value provider, grazie alla quale, ad esempio, diviene decisamente semplice anche gestire il caso di più upload in un'unica richiesta. In questo caso, infatti, è sufficiente inserire i campi di input desiderati nella view come nel codice in basso.
<form action="" method="post" enctype="multipart/form-data"> <label for="file1">File 1:</label> <input type="file" name="files" id="file1" /> <label for="file2">File 2:</label> <input type="file" name="files" id="file2" /> <label for="file3">File 3:</label> <input type="file" name="files" id="file3" /> <input type="submit" value="Invia" /> </form>
Successivamente possiamo processare l'input nel controller in questo modo:
[HttpPost] public ActionResult Upload(IEnumerable<HttpPostedFileBase> files) { foreach (var file in files) { if (file != null && file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName); file.SaveAs(path); } } return View(); }
Anche in questo caso il nome del parametro files dell'action method corrisponde al valore di tutti gli attributi name dei controlli HTML, mentre il model binder si occupa di costruire automaticamente un IEnumerable
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Catturare la telemetria degli eventi di output cache in ASP.NET Core
Leggere i dati di configurazione di ASP.NET Core da Azure Key Vault
Sfruttare la local cache del browser tramite gli ETag in ASP.NET Core
Migrare un progetto ASP.NET Core da .NET 6 a .NET 7
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Definire la durata dell'output cache in ASP.NET Core 7
Gestire la query string nell'output cache di ASP.NET Core
Sfruttare l'output cache di ASP.NET Core 7 con i controller
Taggare la output cache in base al routing in ASP.NET Core
Raggruppare i parametri di una minimal API in un singolo oggetto in ASP.NET Core
Utilizzare parametri a livello di controller nel routing di ASP.NET Core
Sfruttare i tag nell'output cache di ASP.NET Core 7