Comment uploader un ou plusieurs fichier(s) avec ASP.Net MVC 3?
Dans cet article nous allons voir comment uploader un ou plusieurs fichiers avec ASP.Net MVC3.
Cas pour uploader un fichier
Modèle
Notre modèle contiendra un nom et un fichier.
public class FileUplaodModel { [Required] [Display(Name = "User name")] public string UserName { get; set; } [Required] [Display(Name = "File")] public HttpPostedFileBase File { get; set; } } |
Contrôleur
Le contrôleur récupérera le fichier et l’enregistrera dans le répertoire /App_Data/Uploads de l’application.
Dans notre test, on ne traitera pas volontairement le Nom de l’utilisateur.
public ActionResult Upload() { return View(); } [HttpPost] public ActionResult Upload(FileUplaodModel fileUploadModel) { if (fileUploadModel.File.ContentLength > 0) { var fileName = Path.GetFileName(fileUploadModel.File.FileName); if (!String.IsNullOrEmpty(fileName)) { var path = Path.Combine(Server.MapPath("~/App_Data/Uploads"), fileName); fileUploadModel.File.SaveAs(path); } } return RedirectToAction("Upload"); } |
Vue
Et pour finir notre vue.
Afin de pouvoir uploader des fichiers, le formulaire doit utiliser multipart/form-data comme type d’encryption.
De plus en laissant les paramètres action et controller de BeginForm à null, la validation du formulaire aura le même effet que BeginForm().
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>FileUplaodModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.UserName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>
<div class="editor-field">
@Html.LabelFor(model => model.Files)
@Html.TextBoxFor(model => model.Files, new { type = "file" })<br />
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
} |
Cas pour uploader plusieurs fichiers
Modèle
Le modèle ne contiendra plus un fichier mais une liste de fichiers.
[Display(Name = "Files")] public IEnumerable<HttpPostedFileBase> Files { get; set; } |
Contrôleur
Le Contrôleur gérera une liste de fichiers.
[HttpPost] public ActionResult Upload(FileUplaodModel fileUploadModel) { foreach(HttpPostedFileBase file in fileUploadModel.Files) { if (file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); if (!String.IsNullOrEmpty(fileName)) { var path = Path.Combine(Server.MapPath("~/App_Data/Uploads"), fileName); file.SaveAs(path); } } } return RedirectToAction("Upload"); } |
Conclusion
Dans cet article, on aura vu comment uploader un ou plusieurs fichiers avec ASP.Net MV3
