使用HttpFileCollectionBase问题使用C#和MVC3上传多个文件

问题描述:

我创建了一个保存文件的控制器。使用HttpFileCollectionBase问题使用C#和MVC3上传多个文件

下面的代码是控制器的一部分:

if (Request.Files.Count != 0) { 
     HttpFileCollectionBase files = Request.Files; 

     foreach (HttpPostedFileBase file in files) { 
      if (file.ContentLength > 0) { 
       if (!file.ContentType.Equals("image/vnd.dwg")) { 
        return RedirectToAction("List"); 
       } 
      } 
     } 
} 

在ASPX页面很简单:

<input type="file" name="file" /> 
<input type="file" name="file" /> 
...// many inputs type file 

的问题是foreach因为它返回一个错误一样(我知道,因为我跑在调试模式下并在foreach语句中放置断点):

Unable to cast object of type 'System.String' to type 'System.Web.HttpPostedFileBase'. 

我的错误是什么?

尝试这样的:

[HttpPost] 
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files) 
{ 
    if (files != null && files.Count() > 0) 
    { 
     foreach (var uploadedFile in files) 
     { 
      if (uploadedFile.ContentType != "image/vnd.dwg") 
      { 
       return RedirectToAction("List"); 
      } 

      var appData = Server.MapPath("~/app_data"); 
      var filename = Path.Combine(appData, Path.GetFileName(uploadedFile.FileName)); 
      uploadedFile.SaveAs(filename);      
     } 
    } 

    return RedirectToAction("Success"); 
} 

和修改标记,以便该文件输入端被命名文件:

<input type="file" name="files" /> 
<input type="file" name="files" /> 
...// many inputs type file 
+0

我尝试了上面的代码(看起来和我的代码一样),但是我改变了关于'foreach'的想法。我现在使用'for'语句。它运作良好。 – 2012-02-29 14:11:29

+0

和最后一提:我没有参数在我的控制器功能 – 2012-02-29 14:13:58

+0

我试过这个解决方案,但我没有检索任何值! – 2015-12-23 11:50:19

看一看this post由菲尔哈克它演示了如何处理多个文件使用MVC上传。您尝试使用的对象是ASP.NET Webforms。

for (int i = 0; i < Request.Files.Count; i++) 
{ 
    var file = Request.Files[i]; 
    // this file's Type is HttpPostedFileBase which is in memory 
} 

HttpRequestBase.Files需要一个指数,所以使用for代替foreach