web-dev-qa-db-fra.com

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 l'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 voici mon code de vue:

@model MyApp.Models.tblPortfolio

<h2>Create</h2>

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>tblPortfolio</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Title)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Title)
            @Html.ValidationMessageFor(model => model.Title)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.ImageFile)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.ImageFile, new { type = "file" })
            @Html.ValidationMessageFor(model => model.ImageFile)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Link)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Link)
            @Html.ValidationMessageFor(model => model.Link)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

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 le chemin de l'image?

41
Persian.

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

<input type="file" name="file" />

Ensuite, vous devrez modifier votre message 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
    }
}
45
mattytommo

Vous pouvez l'obtenir à partir de Request en utilisant Request.Files Collection, en cas de téléchargement d'un seul fichier, il suffit de lire 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 parcourir le Request.Files collection:

[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 souhaitez télécharger un fichier sans actualisation de page via ajax, vous pouvez utiliser cet article qui utilise le plugin jquery

3
Ehsan Sajjad