2008-11-18 17 views
41

Tôi có mẫu đơn này theo quan điểm của tôi:Tải tệp lên bằng ASP.Net MVC - nhận tên nhưng không có luồng tệp, tôi đang làm gì sai?

<!-- Bug (extra 'i') right here-----------v --> 
<!-- was: <form method="post" enctype="mulitipart/form-data" action="/Task/SaveFile"> --> 
<form method="post" enctype="multipart/form-data" action="/Task/SaveFile"> 
<input type="file" id="FileBlob" name="FileBlob"/> 
<input type="submit" value="Save"/> 
<input type="button" value="Cancel" onclick="window.location.href='/'" /> 
</form> 

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

public ActionResult SaveFile(FormCollection forms) 
{ 
    bool errors = false; 
    //this field is never empty, it contains the selected filename 
    if (string.IsNullOrEmpty(forms["FileBlob"])) 
    { 
     errors = true; 
     ModelState.AddModelError("FileBlob", "Please upload a file"); 
    } 
    else 
    { 
     string sFileName = forms["FileBlob"]; 
     var file = Request.Files["FileBlob"]; 
     //'file' is always null, and Request.Files.Count is always 0 ??? 
     if (file != null) 
     { 
     byte[] buf = new byte[file.ContentLength]; 
     file.InputStream.Read(buf, 0, file.ContentLength); 
     //do stuff with the bytes 
     } 
     else 
     { 
     errors = true; 
     ModelState.AddModelError("FileBlob", "Please upload a file"); 
     } 
    } 
    if (errors) 
    { 
     return ShowTheFormAgainResult(); 
    } 
    else 
    { 
     return View(); 
    } 
} 

Dựa trên tất cả các mẫu mã tôi đã có thể tìm thấy, đây có vẻ như là cách để làm đi. Tôi đã thử với các tệp nhỏ và lớn, không có sự khác biệt trong kết quả. Trường biểu mẫu luôn chứa tên tệp khớp với những gì tôi đã chọn và bộ sưu tập Request.Files luôn trống.

Tôi không nghĩ nó có liên quan, nhưng tôi đang sử dụng Máy chủ web phát triển VS. AFAIK nó hỗ trợ tải lên tệp giống như IIS.

Đến muộn và có khả năng tôi đang thiếu điều gì đó hiển nhiên. Tôi rất biết ơn vì lời khuyên nào.

+0

Tham khảo http://stackoverflow.com/questions/9411563/asp-net-mvc3 -razor-file-upload-cho-zero-as-file-count cho một vấn đề liên quan – Lijo

Trả lời

50

Tôi không biết những gì chính sách là trên đăng thô tục, nhưng đây là vấn đề:

enctype="mulitipart/form-data" 

Thêm i trong đó đã ngừng tải tệp lên. Đã phải chạy Fiddler để thấy rằng nó đã không bao giờ gửi các tập tin ở nơi đầu tiên.

Nó nên đọc:

enctype="multipart/form-data" 
+0

HAHA :) tôi đã bỏ lỡ điều đó! làm tốt lắm! Có thể bạn có thể cập nhật phần dưới cùng của bài đăng đầu tiên bằng cách đề cập đến giải pháp và đánh dấu câu trả lời của riêng bạn, v.v. –

+0

Hoặc có lẽ cập nhật mã, vì vậy mọi người sao chép-dán ví dụ đầu tiên ít nhất có được mã đúng. –

+2

Tôi đã gặp sự cố này hai lần do sao chép mã hóa từ bài đăng này! –

2
var file = Request.Files[sFileName]; 

nên ...

var file = Request.Files["FileBlob"]; 

mà nói, Request.Files.Count nên 1 ... hmmm

+0

Thay đổi nó và cố gắng một lần nữa để chắc chắn nhưng không có thay đổi. Request.Files ["FileBlob"] cũng trả về null. Request.Files.Count vẫn là 0. Tôi sẽ chỉnh sửa mẫu mã mặc dù để làm rõ. –

0

tốt mà bạn tìm thấy lỗi của bạn.

Lưu ý rằng bạn sẽ muốn thử/nắm bắt xung quanh mã xử lý tệp để bạn biết khi nào quyền của tệp vv không được thiết lập chính xác.

+0

Thực ra, tôi không chạm vào hệ thống tệp. Tệp được lưu trữ trong cơ sở dữ liệu. Nhưng cảm ơn. –

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