本篇体验在控制器方法中使用controllerContext.HttpContext.Request.Files上传多个文件。兄弟篇为:
MVC文件上传01-使用jquery异步上传并客户端验证类型和大小
MVC文件上传02-使用HttpPostedFileBase上传多个文件
□ 控制器
1: using System;
2: using System.Collections.Generic;
3: using System.IO;
4: using System.Linq;
5: using System.Web;
6: using System.Web.Mvc;
7:
8: namespace MvcApplication2.Controllers
9: {
10: public class HomeController : Controller
11: {
12: public ActionResult Index()
13: {
14: return View();
15: }
16:
17: public ActionResult FileUploads()
18: {
19: string pathForSaving = Server.MapPath("~/Uploads");
20: if (this.CreateFolderIfNeeded(pathForSaving))
21: {
22: foreach (string file in Request.Files)
23: {
24: HttpPostedFileBase uploadFile = Request.Files[file] as HttpPostedFileBase;
25: if (uploadFile != null && uploadFile.ContentLength > 0)
26: {
27: var path = Path.Combine(pathForSaving, uploadFile.FileName);
28: uploadFile.SaveAs(path);
29: }
30: }
31: }
32: return RedirectToAction("Index");
33: }
34:
35: // 检查是否要创建上传文件夹
36: private bool CreateFolderIfNeeded(string path)
37: {
38: bool result = true;
39: if (!Directory.Exists(path))
40: {
41: try
42: {
43: Directory.CreateDirectory(path);
44: }
45: catch (Exception)
46: {
47: //TODO:处理异常
48: result = false;
49: }
50: }
51: return result;
52: }
53: }
54: }
□ Home/Index.cshtml视图
1: @{
2: ViewBag.Title = "Index";
3: Layout = "~/Views/Shared/_Layout.cshtml";
4: }
5:
6: @using (Html.BeginForm("FileUploads", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
7: {
8: <input type="file" name="files1" id="file1" /><br/>
9: <input type="file" name="files2" id="file2" /><br/>
10: <input type="file" name="files3" id="file3" /><br/>
11: <input type="submit" value="同时上传多个文件" />
12: }
注意:
name属性值可以不同
参考资料
※ ASP.NET MVC - 不使用HttpPostedFileBase 处理文件上传