根据项目需要,研究了一下如何在ASP.NETMVC下实现批量文件上传。首先,介绍单文件上传;然后,介绍多文件上传如何实现。
一、单文件上传
单文件上传的原理是将文件数据放入request中,由页面直接传递至后台controller中,类似于view和controller之间传参数,直接贴上代码加注释。
Upload.aspx文件中的代码:
1
2
3
4
|
< form enctype = "multipart/form-data" method = "post" > < input type = "file" id = "file" /> < input type = "submit" value = "上传" /> </ form > |
Controller中代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[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。
1
2
3
|
<system.web> <httpRuntime maxRequestLength= "40960" /> </system.web> |
二、批量文件上传
思路是通过js根据用户需求动态添加上传控件,多个文件通过request一并上传至controller。
Upload.aspx文件中的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
< 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中的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[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属性值互不相同。
以上便实现了批量文件上传。
本人才疏学浅,仅供大家参考,若有不当之处,请大家批评指正!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/Tomato_Sir/article/details/79630434