Pour uploader un fichier, nous avons plusieurs choix dans dotnet 6.0, avec mvc.core.
Utiliser fetch (et penser Ă polyfill votre fetch si vous ĂȘtes sous IE par exemple). Vous pouvez aussi utiliser simplement la mĂ©thode POST.
Un formulaire plus précis
Pour bien démarrer, vous devez ajouter un formulaire avec la précision form-data pour récupérer les données binaires.
<form method="post" enctype="multipart/form-data">
<input type="file" name="picture" multiple />
<button>Load files</button>
</form>
Vous notez Ă©galement le champ Input qui va permettre d’uploader votre fichier sur le serveur.
Fait important : C’est bien un type file.
DeuxiĂšme point important, vous pouvez, grĂące Ă multiple, permettre l’upload de plusieurs fichiers en mĂȘme temps.
Une récupération par une action HttpPost
Du cÎté controller, vous allez prévoir une action, qui est filtrée par un HttpPost.
[HttpPost]
public IActionResult Index(IList<IFormFile> picture)
{
return View();
}
Notez ici la liste des fichiers, de type IFormFile. Vous allez pouvoir parcourir toute la liste des fichiers uploadés.
Point trÚs important ici : le nom de la variable « picture » doit correspondre au name dans votre input, du cÎté Html. Sinon, vous aurez toujours null dans la variable.
Sauvegarder les données
[HttpPost]
public async Task<IActionResult> Index(IList<IFormFile> picture)
{
foreach (var item in picture)
{
using var file = System.IO.File.OpenWrite("c:\\Tests\\test-" + item.FileName);
await item.CopyToAsync(file);
}
return View();
}
Notons ici l’utilisation de l’async / await pour la copy du contenu du fichier.
Et voilà , vous pouvez récupérer les données de vos fichiers !
Attention Ă ne pas enregistrer le fichier avec le nom proposĂ© par le IFormFile. C’est un conseil proposĂ© Ă©galement par dotnet, dans sa documentation sur l’upload.
Ca Ă©veille votre curiositĂ© ?! đ