2012-01-09 40 views
6

Tôi có thể sử dụng:ASP.NET MVC 3: Hỗ trợ tải lên nhiều tệp HTML5?

<input type="file" name="files" id="files" multiple="multiple" /> 

và ràng buộc nó vào:

[HttpPost] 
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files) 
{ 
    ... 
} 

Tôi đang viết một ứng dụng web cho các trình duyệt hiện đại và không cần phải lo lắng về việc IE vì vậy tôi muốn tránh sử dụng Flash. Ngay bây giờ files luôn là null khi tôi đăng biểu mẫu. Có cách nào để có được điều này để làm việc trong MVC 3?

Cảm ơn!

+1

thể trùng lặp của [Multi-File tải với HTML 5] (http://stackoverflow.com/questions/8713802/multi-file-upload-with-html-5) –

+1

Bạn có thể sẽ cần phải tạo một chất kết dính mô hình tùy chỉnh. – Craig

+0

Hoặc tạo chữ ký công khai Tải lên (HttpPostedFileBase [] tệp) ' –

Trả lời

13

Bạn đã đặt mã hóa chính xác trong biểu mẫu chưa?

Tôi tin rằng bạn vẫn cần:

new { enctype = "multipart/form-data" } 

Trong tuyên bố hình thức để đảm bảo trình duyệt có thể gửi tập tin.

Ví dụ:

@using (Html.BeginForm("action", "controller", FormMethod.Post, new { enctype = "multipart/form-data" })) 
+0

Có, tôi đã đặt mã hóa chính xác. Cảm ơn –

+0

OK, đã nói quá sớm. Đã quay trở lại kiểm tra lại và tôi đã có một loại-o ở đó đã ngăn chặn các tập tin từ đăng! –

1

Sẽ không phải là một sử dụng các Request.Files cho tương thích ngược như sau:

public ActionResult UploadFiles() 
{ 
    string UpoadedFilesFolder = "YourServerFolder"; 
    string fileName =""; 
    byte[] fileData=null; 
    foreach (HttpPostedFileBase uf in Request.Files) 
    { 
    HttpPostedFileBase UpoadedFile = uf; 
    if (uf.ContentLength > 0) 
    { 
     fileName = Path.GetFileName(UpoadedFile.FileName); 
     using (BinaryReader br = new BinaryReader(UpoadedFile.InputStream)) 
     { 
     fileData = br.ReadBytes((int)UpoadedFile.InputStream.Length); 
     } 
     using (FileStream fs = new FileStream(Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath(UpoadedFilesFolder), fi.FileName), FileMode.Create)) 
     { 
     fs.Write(fileData, 0, fileData.Length); 
     } 
    } 
    } 
    return Content("OK"); 
} 
0

My Index Xem:

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

Trong điều khiển

public ActionResult Upload(HttpPostedFileBase[] files) 
     { 
      TempData["Message"] = files.Count(); 
      return RedirectToAction("Index"); 
     } 

Và các tệp có chứa tệp đã tải lên - hoạt động tốt cho tôi!

0

này sẽ không làm việc:

foreach (HttpPostedFileBase uf in Request.Files) 
{ 
    HttpPostedFileBase UpoadedFile = uf; 
} 

nên làm như thế này:

for (int i=0; i<Request.Files.Count; i++) 
{ 
    HttpPostedFileBase UpoadedFile = Request.Files[i]; 
} 
Các vấn đề liên quan