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