254 votes

MVC 4 Razor File Upload

Je suis nouveau dans MVC 4 et j'essaie d'implémenter le contrôle de téléchargement de fichiers dans le système de gestion de l'information. mon site web. Je n'arrive pas à trouver l'erreur. dans mon fichier.

Contrôleur :

public class UploadController : BaseController
    {
        public ActionResult UploadDocument()
        {
            return View();
        }

       [HttpPost]
       public ActionResult Upload(HttpPostedFileBase file)
       {
           if (file != null && file.ContentLength > 0)
           {
               var fileName = Path.GetFileName(file.FileName);
               var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
               file.SaveAs(path);
           }

           return RedirectToAction("UploadDocument");
        }
    }

Voir :

@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" }))
{ 
    <input type="file" name="FileUpload" />
    <input type="submit" name="Submit" id="Submit" value="Upload" />
}

345voto

Cristi Pufu Points 2878

El Upload de la méthode HttpPostedFileBase doit avoir le même nom que le paramètre file input .

Alors changez juste l'entrée en ceci :

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

Vous pouvez également trouver les fichiers dans Request.Files :

[HttpPost]
public ActionResult Upload()
{
     if (Request.Files.Count > 0)
     {
         var file = Request.Files[0];

         if (file != null && file.ContentLength > 0)
         {
            var fileName = Path.GetFileName(file.FileName);
            var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
            file.SaveAs(path);
         }
     }

     return RedirectToAction("UploadDocument");
 }

66voto

Bishoy Hanna Points 901

La clarifier. Modèle :

public class ContactUsModel
{
    public string FirstName { get; set; }             
    public string LastName { get; set; }              
    public string Email { get; set; }                 
    public string Phone { get; set; }                 
    public HttpPostedFileBase attachment { get; set; }

Action postale

public virtual ActionResult ContactUs(ContactUsModel Model)
{
 if (Model.attachment.HasFile())
 {
   //save the file

   //Send it as an attachment 
    Attachment messageAttachment = new Attachment(Model.attachment.InputStream,       Model.attachment.FileName);
  }
}

Enfin la méthode d'extension pour vérifier le hasFile

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace AtlanticCMS.Web.Common
{
     public static class ExtensionMethods 
     {
         public static bool HasFile(this HttpPostedFileBase file)
         {
             return file != null && file.ContentLength > 0;
         }        
     }
 }

17voto

Jagadisha B S Points 19

Voir la page

@using (Html.BeginForm("ActionmethodName", "ControllerName", FormMethod.Post, new { id = "formid" }))
 { 
   <input type="file" name="file" />
   <input type="submit" value="Upload" class="save" id="btnid" />
 }

script fichier

$(document).on("click", "#btnid", function (event) {
        event.preventDefault();
        var fileOptions = {
            success: res,
            dataType: "json"
        }
        $("#formid").ajaxSubmit(fileOptions);
    });

En contrôleur

    [HttpPost]
    public ActionResult UploadFile(HttpPostedFileBase file)
    {

    }

6voto

Hafiz Asad Points 129

Vous devez juste changer le nom de votre champ d'entrée car le même nom est requis dans le paramètre et le nom du champ d'entrée il suffit de remplacer cette ligne Votre code fonctionne bien

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

2voto

Petr Tomášek Points 710

Je pense que le meilleur moyen est d'utiliser HttpPostedFileBase dans votre contrôleur ou votre API. Après cela, vous pouvez simplement détecter la taille, le type, etc.

Vous pouvez trouver les propriétés du fichier ici :

MVC3 : Comment vérifier si HttpPostedFileBase est une image ?

Par exemple, ImageApi :

[HttpPost]
[Route("api/image")]  
public ActionResult Index(HttpPostedFileBase file)  
{  
    if (file != null && file.ContentLength > 0)  
        try 
        {  
            string path = Path.Combine(Server.MapPath("~/Images"),  
               Path.GetFileName(file.FileName));

            file.SaveAs(path);  
            ViewBag.Message = "Your message for success";  
        }  
        catch (Exception ex)  
        {  
            ViewBag.Message = "ERROR:" + ex.Message.ToString();  
        }  
    else 
    {  
        ViewBag.Message = "Please select file";  
    }  
    return View();  
}

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X