2009-04-19 8 views
9

Avec le balisage suivant à mon avis:télécharger le fichier MVC

<form action="Categories/Upload" enctype="multipart/form-data" method="post"> 
    <input type="file" name="Image"> 
    <input type="submit" value"Save"> 
</form> 

Et dans mon contrôleur:

public ActionResult Upload(FormCollection form) 
{ 
    var file = form["Image"]; 
} 

La valeur du fichier est null. Si je l'essaye dans une vue différente en utilisant un contrôleur différent et qu'il fonctionne avec le même code. J'ai Vista VS2008 sur Vista, MVC 1.0.

Pourquoi?

Malcolm

+7

« ne sera avoir une réponse "- ??? –

+0

Eh bien les 2 réponses données ne le font pas et je mets de l'argent dessus que personne ne le résout sur SO. – Malcolm

+0

La réponse est celle qui résout un problème droit – Malcolm

Répondre

6

Essayez ce code:

public ActionResult Upload() 
    { 
     foreach (string file in Request.Files) 
     { 
      var hpf = this.Request.Files[file]; 
      if (hpf.ContentLength == 0) 
      { 
       continue; 
      } 

      string savedFileName = Path.Combine(
       AppDomain.CurrentDomain.BaseDirectory, "PutYourUploadDirectoryHere"); 
       savedFileName = Path.Combine(savedFileName, Path.GetFileName(hpf.FileName)); 

      hpf.SaveAs(savedFileName); 
     } 

    ... 
    } 
+0

Aucune demande.Les fichiers sont vides ???? – Malcolm

+0

Vous n'avez pas besoin de Request.Files. Voir cette réponse: http://stackoverflow.com/questions/765211/file-upload-mvc/765308#765308 – bzlm

+0

Vous avez besoin de Request.Files si vous avez l'intention de gérer plusieurs téléchargements de fichiers. –

34

Utilisez HttpPostedFileBase comme paramètre sur votre action. En outre, ajoutez l'attribut AcceptVerb à POST.

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Upload(HttpPostedFileBase image) 
{ 
    if (image != null) { 
     // do something 
    } 
    return View(); 
} 

Ce code est tout à fait dans l'esprit/conception de ASP.NET MVC.

+2

Je viens de passer quelques heures à tourner en rond parce que mon tag d'entrée de fichier avait un attribut "ID =", mais pas un "NAME =" - assurez-vous d'inclure "name = ..." ou le fichier affichera le résultat d'action , mais sera nul. J'espère que cela aide quelqu'un. – Losbear

7

ne pas être pointilleux ici ou quoi que ce soit, mais voici comment le code devrait regarder, comme Daniel manque quelques petits détails dans le code qu'il a fourni ...

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UploadPlotImage(HttpPostedFileBase image) 
{  
    if (image != null) 
    {   
     // do something  
    } 

    return View(); 
} 
+0

Que manquait Daniel? – KTF

+1

Je suppose que Daniel manquait quelque chose mais vu le message de Brett et modifié sa réponse. –

+1

Police de grammaire! "UploadPlotImadge" >>> "UploadPlotImage" lol =) – Losbear

2

Même je suis face à un problème La valeur était nulle dans l'image à

public ActionResult UploadPlotImadge(HttpPostedFileBase image) 

Plus tôt, je n'ai pas ajouté [AcceptVerbs(HttpVerbs.Post)] que j'ajouté. Même après avoir ajouté, il ne fonctionne pas parce que la deuxième partie, je manquais, enctype="multipart/form-data", avait besoin d'être dans la balise form ..

Maintenant, ça marche pour moi ....

+0

enctype = "multipart/form-data" a été critique pour moi aussi, pourquoi tout le monde n'en a-t-il pas besoin? – Slider345

0

essayer cette classe et sous l'action et corrige le chemin du dossier dans AppSetting.

config:

<appSettings> 
      <add key="UploadFolerPath" value="..Your folder path" /> 
    </appSettings> 

Vue: -

<form action="Account/AddImage" id="form_AddImage" method="post" enctype="multipart/form-data"> 

      <input type="file" id="Img" name="Img" class="required" /> 

      <input type="submit" value="Upload" id="btnSubmit" /> 

</form> 

Classe: -

public class FileUpload 
{ 
    public string SaveFileName 
    { 
     get; 
     set; 
    } 


    public bool SaveFile(HttpPostedFileBase file, string FullPath) 
    { 
     string FileName = Guid.NewGuid().ToString(); 

     FileName = FileName + System.IO.Path.GetExtension(file.FileName); 

     SaveFileName = FileName; 

     file.SaveAs(FullPath + "/" + FileName); 
     return true; 
    } 
} 

// Action Post

[HttpPost] 
    public ActionResult AddImage(FormCollection Form) 
    { 

     FileUpload fileupload = new FileUpload(); 
     var image=""; 

     HttpPostedFileBase file = Request.Files["Img"]; 

     if (file.FileName != null && file.FileName != "") 
     { 

      if (upload.ContentLength > 0) 
      { 

        fileupload.SaveFile(Request.Files["Img"], Server.MapPath(AppSetting.ReadAppSetting("UploadFolerPath"))); 

       image = fileupload.SaveFileName; 

       // write here your Add/Save function 

       return Content(image); 


      } 
     } 
     else 
     { 
        //return....; 
     } 

    } 
Questions connexes