簡體   English   中英

使用C#和MVC3的HttpFileCollectionBase問題上傳多個文件

[英]Upload multiple files using HttpFileCollectionBase issue with C# and 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
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

看看Phil Haack的這篇文章 ,演示如何使用MVC處理多個文件上傳。 您嘗試使用的對象是ASP.NET Webforms。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM