Téléchargement d’une image dans ASP.NET MVC

J’ai un formulaire de téléchargement et je veux transmettre mes informations telles qu’une image et un autre champ, mais je ne sais pas comment puis-je télécharger une image.

c’est mon code de contrôleur:

[HttpPost] public ActionResult Create(tblPortfolio tblportfolio) { if (ModelState.IsValid) { db.tblPortfolios.AddObject(tblportfolio); db.SaveChanges(); return RedirectToAction("Index"); } return View(tblportfolio); } 

Et ceci est mon code de vue:

 @model MyApp.Models.tblPortfolio 

Create

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.ValidationSummary(true)
tblPortfolio
@Html.LabelFor(model => model.Title)
@Html.EditorFor(model => model.Title) @Html.ValidationMessageFor(model => model.Title)
@Html.LabelFor(model => model.ImageFile)
@Html.TextBoxFor(model => model.ImageFile, new { type = "file" }) @Html.ValidationMessageFor(model => model.ImageFile)
@Html.LabelFor(model => model.Link)
@Html.EditorFor(model => model.Link) @Html.ValidationMessageFor(model => model.Link)

}

Maintenant, je ne sais pas comment puis-je télécharger l’image et l’enregistrer sur le serveur. Comment puis-je définir le nom de l’image par Guid.NewGuid(); ? Ou comment puis-je définir Image Path?

Tout d’abord, vous devez modifier votre vue pour inclure les éléments suivants:

  

Ensuite, vous devrez changer votre post ActionMethod pour prendre un HttpPostedFileBase , comme ceci:

 [HttpPost] public ActionResult Create(tblPortfolio tblportfolio, HttpPostedFileBase file) { //you can put your existing save code here if (file != null && file.ContentLength > 0) { //do whatever you want with the file } } 

Vous pouvez l’obtenir à partir de Request utilisant Request.Files Collection, en cas de téléchargement d’un seul fichier, lisez simplement le premier index à l’aide de Request.Files[0] :

 [HttpPost] public ActionResult Create(tblPortfolio tblportfolio) { if(Request.Files.Count > 0) { HttpPostedFileBase file = Request.Files[0]; if (file != null) { // business logic here } } } 

En cas de téléchargement de plusieurs fichiers, vous devez effectuer une itération dans la collection Request.Files :

 [HttpPost] public ActionResult Create(tblPortfolio tblportfolio) { for(int i=0; i < Request.Files.Count; i++) { HttpPostedFileBase file = Request.Files[i]; if (file != null) { // Do something here } } } 

Si vous voulez télécharger un fichier sans actualisation de la page via ajax, vous pouvez utiliser cet article qui utilise le plugin jquery