Pour envoyer des fichiers avec ASP.NET MVC, c’est pas compliqué, mais encore faut-il savoir comment faire. Si en ASP.NET WebForm on a un contrôle qui le fait, avec MVC, on commence à en avoir l’habitude, il va falloir le faire à la pougne.

On arrête de râler, les assistés, c’est pas plus compliqué qu’avant !

Pour envoyer un fichier, on va utiliser l’élément HTML Input, de type "file". On le mets dans notre formulaire, et on envoie. Attention, pour que ça fonctionne, il va falloir ajouter un attribut à notre formulaire : enctype="multipart/form-data". Scott Hanselman nous explique pourquoi sur son blog.

<% using (Html.BeginForm("SendFile", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
   { %> 
<input type="file" name="fileSent" /> 
<input type="submit" value="Send" /> 
<% } %>

Ensuite, lorsqu’on va poster notre formulaire, le fichier sera directement accessible dans notre Request :

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult SendFile() 
{ 
    HttpPostedFileBase file = Request.Files["fileSent"]; 

    //TODO : Gerer le fichier  
    file.SaveAs(filePath); 

    return View(); 
}

Et parce que c’est de l’ASP.NET MVC, et qu’ASP.NET MVC ça poutre, on a même une solution encore plus simple ! Il suffit de le mettre en paramètre de notre action (n’oubliez pas que le nom du paramètre doit correspondre au "name" du input)

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult SendFile(HttpPostedFileBase fileSent) 
{ 
    //TODO : Gerer le fichier  
    fileSent.SaveAs(filePath); 

    return View(); 
}