Upload multiple files using HttpFileCollectionBase

2020-02-29 06:24发布

I created a controller which save files.

The below code is a part of that Controller:

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

in ASPX page is simple:

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

The problem is foreach because it returns an error like (I know because I run in Debug mode and placed breakpoint at foreach statement):

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

What is my mistake ?

3条回答
2楼-- · 2020-02-29 06:53

Try like this:

[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");
}

and modify the markup so that the file inputs are named files:

<input type="file" name="files" />
<input type="file" name="files" />
...// many inputs type file
查看更多
一纸荒年 Trace。
3楼-- · 2020-02-29 06:53
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 requires an index, so use for instead of foreach.

查看更多
相关推荐>>
4楼-- · 2020-02-29 07:02

Have a look at this post by Phil Haack which demonstrates how to process multiple file uploads using MVC. The object you are trying to use is for ASP.NET Webforms.

查看更多
登录 后发表回答