根据项目需要,研究了一下如何在ASP.NETMVC下实现批量文件上传。首先,介绍单文件上传;然后,介绍多文件上传如何实现。
一、单文件上传
单文件上传的原理是将文件数据放入request中,由页面直接传递至后台controller中,类似于view和controller之间传参数,直接贴上代码加注释。
Upload.aspx文件中的代码:
<form enctype="multipart/form-data" method="post">
<input type="file" id="file" />
<input type="submit" value="上传" />
</form>
Controller中代码:
[HttpPost]
public ActionResult Upload(FormCollection form)
{
if (Request.Files.Count == 0){
//Request.Files.Count 文件数为0上传不成功
return View();
}
var file = Request.Files[0];
if (file.ContentLength == 0){
//文件大小大(以字节为单位)为0时,做一些操作
return View();
}
else{
//文件大小不为0
file = Request.Files[0]; //服务器上的UpLoadFile文件夹必须有读写权限
string target = Server.MapPath("/")+("/Mock/Learning/");//取得目标文件夹的路径
string filename = file.FileName;//取得文件名字
string path = target + filename;//获取存储的目标地址
file.SaveAs(path);}
return View();
}
这里需要注意的是,在ASP.NET中,request的默认大小为4M,因此,如需上传较大文件,需要更改Web.config。
<system.web>
<httpRuntime maxRequestLength="40960"/>
</system.web>
二、批量文件上传
思路是通过js根据用户需求动态添加上传控件,多个文件通过request一并上传至controller。
Upload.aspx文件中的代码:
<form enctype="multipart/form-data" method="post">
<div id="FileList">
<div>
<input type="file" id="file" name="file0"/>
</div>
</div>
<p>
<a onclick="AddFile();">添加文件</a>
</p>
<p>
<input type="submit" value="上传" />
</p>
</form>
<script>
var index = 1;
function AddFile() {
var ul = document.getElementById("FileList");
var inputDiv = document.createElement("div");
inputDiv.setAttribute("Id", "div" + index);
var file = document.createElement("input");
file.setAttribute("type", "file");
file.setAttribute("id", "file" + index);
file.setAttribute("name", "file" + index);
var btnDel = document.createElement("input");
btnDel.setAttribute("type", "button");
btnDel.setAttribute("value", "删除");
btnDel.setAttribute("Id", index);
btnDel.onclick = function() {
inputDiv.removeChild(file);
inputDiv.removeChild(btnDel);
ul.removeChild(inputDiv);
}
inputDiv.appendChild(file);
inputDiv.appendChild(btnDel);
ul.appendChild(inputDiv);
index++;
}
</script>
Controller中的代码:
[HttpPost]
public ActionResult Upload(FormCollection form)
{
foreach (string item in Request.Files)
{
HttpPostedFileBase file = Request.Files[item] as HttpPostedFileBase;
if (file==null || file.ContentLength == 0)
continue;
//判断Upload文件夹是否存在,不存在就创建
string path = Server.MapPath("..//Upload");
if (!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
}
path = AppDomain.CurrentDomain.BaseDirectory + "Upload/";
//获取上传的文件名
string fileName = file.FileName;
//上传
file.SaveAs(Path.Combine(path,fileName));
}
return Content("<script>alert('上传文件成功');window.history.back();</script>");
}
注意在Request.Files中,不同文件的index是上传控件的name属性值,因此在aspx页面代码中必须保证多个上传控件的name属性值互不相同。
以上便实现了批量文件上传。
本人才疏学浅,仅供大家参考,若有不当之处,请大家批评指正!
您可能感兴趣的文章:ASP.NET MVC HttpPostedFileBase文件上传的实例代码ASP.NET MVC4 利用uploadify.js多文件上传asp.net core mvc实现文件上传实例asp.net mvc 实现文件上传带进度条的思路与方法解决ASP.NET Core Mvc文件上传限制问题实例ASP.NET MVC文件上传教程(二)ASP.NET MVC 文件上传教程(一)ASP.NET MVC5实现文件上传与地址变化处理(5)ASP.NET MVC处理文件上传的小例子用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]