在ASP.NET MVC应用程序中选择文件夹以上传文件

时间:2019-02-26 17:07:27

标签: asp.net-mvc

如果我要上传文件,那就很简单:

剃刀

@Html.TextBoxFor(m => m.File, new { type = "file" })

HTML

<input type="file">

但是,如果我想选择一个文件夹来上传包含的所有文件,可以吗?

类似的东西:

剃刀

@Html.TextBoxFor(m => m.Folder, new { type = "folder" })

显示“选择文件夹对话框”。

1 个答案:

答案 0 :(得分:1)

使用@Html.TextBoxFor时不能这样做。可能还有另一种上传文件夹的方法,但我不知道。

但是,您可以更改文件上传对话框以一次上传多个文件,这基本上是同一件事。 Here is a tutorial showing how.

基本上,您需要在文件上传输入中添加以下属性:

@Html.TextBoxFor(m => m.File, new { type = "file", @multiple = "multiple"  })

您还需要将multpart/form-data属性添加到R​​azor代码中以生成表单。这是该教程中的一个示例:

@using (Html.BeginForm("UploadFiles", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))

这时,您可以选择多个文件上载。您可以轻松地打开文件夹,按CTRL + A选中所有文件夹,然后单击“上载”以一次上传整个文件夹。

请注意,您需要修改控制器操作以一次接受多个文件。

编辑:这是一个前面提到的教程中有关如何在控制器操作中处理此问题的示例。请注意,您的参数是HttpPostedFileBase个对象的数组,每个对象代表您上载的文件。然后,您遍历每个对象并保存。

[HttpPost]  
public ActionResult UploadFiles(HttpPostedFileBase[] files)  
{  

    //Ensure model state is valid  
    if (ModelState.IsValid)  
    {   //iterating through multiple file collection   
        foreach (HttpPostedFileBase file in files)  
        {  
            //Checking file is available to save.  
            if (file != null)  
            {  
                var InputFileName = Path.GetFileName(file.FileName);  
                var ServerSavePath = Path.Combine(Server.MapPath("~/UploadedFiles/") + InputFileName);  
                //Save file to server folder  
                file.SaveAs(ServerSavePath);  
            }    
        }  
    }  
    return View();  
}