2009-04-19 39 views
9

Với sự đánh dấu sau theo quan điểm của tôi:Tập tin tải lên MVC

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

Và trong bộ điều khiển của tôi:

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

Giá trị của tập tin là null. Nếu tôi thử nó ở chế độ xem khác bằng Bộ điều khiển bộ điều khiển khác và nó hoạt động với cùng một mã.

Tôi có VS2008 trên Vista, MVC 1.0.

Tại sao?

Malcolm

+7

"không ai sẽ có câu trả lời "- ??? –

+0

Vâng 2 câu trả lời được đưa ra không và tôi đặt tiền vào đó không ai giải quyết nó trên SO. – Malcolm

+0

Trả lời là câu hỏi giải quyết vấn đề đúng – Malcolm

Trả lời

6

Hãy thử mã này:

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

Không có Request.Files trống ???? – Malcolm

+0

Bạn không cần Request.Files. Xem câu trả lời này: http://stackoverflow.com/questions/765211/file-upload-mvc/765308#765308 – bzlm

+0

Bạn cần Request.Files nếu bạn định xử lý nhiều tệp tải lên. –

34

Sử dụng HttpPostedFileBase như một tham số vào hành động của bạn. Ngoài ra, hãy thêm thuộc tính AcceptVerb được đặt thành POST.

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

Mã này khá tinh thần/thiết kế của ASP.NET MVC.

+2

Tôi đã dành một vài giờ đi vòng tròn vì thẻ nhập tệp của tôi có thuộc tính "ID =" nhưng không phải là "NAME =" - đảm bảo bạn bao gồm "name = ..." hoặc tệp sẽ đăng lên actionresult , nhưng sẽ rỗng. Hy vọng điều này sẽ giúp một ai đó. – Losbear

7

Không phải kén chọn đây hoặc bất cứ điều gì, nhưng đây là cách mã nên xem xét, như Daniel đang thiếu một vài chi tiết nhỏ trong mã anh ấy cung cấp ...

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

    return View(); 
} 
+0

Daniel bị mất tích là gì? – KTF

+1

Đoán của tôi là Daniel đã bỏ lỡ một cái gì đó nhưng nhìn thấy bài của Brett và sửa đổi câu trả lời của mình. –

+1

Cảnh sát ngữ pháp! "UploadPlotImadge" >>> "UploadPlotImage" lol =) – Losbear

2

Thậm chí tôi đã phải đối mặt với một vấn đề , Giá trị là null trong hình ảnh tại

public ActionResult UploadPlotImadge(HttpPostedFileBase image) 

Trước đó tôi không thêm [AcceptVerbs(HttpVerbs.Post)] mà tôi đã thêm. Ngay cả sau khi thêm nó, nó đã không làm việc vì phần thứ hai tôi nhớ da diết, enctype="multipart/form-data", cần thiết để có trong thẻ biểu mẫu ..

Bây giờ nó làm việc cho tôi ....

+0

enctype = "multipart/form-data" rất quan trọng đối với tôi, tại sao mọi người không cần điều này? – Slider345

0

thử lớp này và bên dưới hành động và sửa đường dẫn thư mục trong AppSetting.

config:

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

xem: -

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

Class: -

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

// bài 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....; 
     } 

    } 
Các vấn đề liên quan