2009-04-19 5 views
9

z następującymi znacznikami moim zdaniem:pliku przesłać MVC

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

I w moim kontrolera:

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

Wartość pliku jest null. Jeśli spróbuję go w innym widoku przy użyciu innego kontrolera kontrolera i działa z tym samym kodem.

Mam VS2008 na Vista, MVC 1.0.

Dlaczego?

Malcolm

+7

„nikt nie będzie mieć odpowiedź "- ??? –

+0

Cóż, dwie udzielone odpowiedzi nie są i wkładam pieniądze na to, że nikt nie rozwiązuje go na SO. – Malcolm

+0

Odpowiedź jest odpowiedzią, która rozwiązuje problem. – Malcolm

Odpowiedz

6

Spróbuj kod:

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

Brak żądania. Pliki są puste ???? – Malcolm

+0

Nie potrzebujesz plików Request.Files. Zobacz tę odpowiedź: http://stackoverflow.com/questions/765211/file-upload-mvc/765308#765308 – bzlm

+0

Potrzebujesz plików Request.Files, jeśli chcesz obsługiwać wiele plików. –

34

Korzystając HttpPostedFileBase jako parametr w swoim działaniu. Ponadto, atrybut AcceptVerb jest ustawiony na POST.

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

Ten kod jest dość w duchu/projektu ASP.NET MVC.

+2

Spędziłem kilka godzin w kółku, ponieważ mój tag wejściowy pliku miał atrybut "ID =", ale nie "NAME =" - upewnij się, że wpisałeś "name = ..." lub plik zostanie opublikowany w wynikach działania , ale będzie mieć wartość null. Mam nadzieję, że to pomaga komuś. – Losbear

7

Nie być wybredna tutaj albo coś, ale oto jak kod powinien wyglądać, jak Daniel brakuje kilka drobnych szczegółów w kodzie on dostarczonej ...

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

    return View(); 
} 
+0

Czego Daniel nie miał? – KTF

+1

Zgaduję, że Daniel czegoś nie zauważył, ale zobaczył post Bretta i zmodyfikował odpowiedź. –

+1

Gramatyka policji! "UploadPlotImadge" >>> "UploadPlotImage" lol =) – Losbear

2

Nawet byłem w obliczu problemu , wartość była zerowa w obrazie w

public ActionResult UploadPlotImadge(HttpPostedFileBase image) 

Wcześniej nie dodać [AcceptVerbs(HttpVerbs.Post)] które dodaną. Nawet po dodaniu go, to nie działa, ponieważ druga część mi brakuje, enctype="multipart/form-data", musiał być w tagu formularza ..

Teraz pracuje dla mnie ....

+0

enctype = "multipart/form-data" również były dla mnie kluczowe, dlaczego nie wszyscy tego potrzebują? – Slider345

0

spróbować tej klasy i poniżej czynności i napraw ścieżkę folderu w AppSetting.

config:

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

widok: -

<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> 

Klasa: -

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; 
    } 
} 

// post Action

[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....; 
     } 

    } 
Powiązane problemy