ASP.NET Core 实现文件上传教程

12 下载量 98 浏览量 更新于2024-08-29 收藏 263KB PDF 举报
"ASP.NET Core 实现文件上传功能" 在 ASP.NET Core 中,文件上传是一个常见的需求,无论是单个文件还是多个文件的上传,框架都提供了方便的API和工具来支持。本文将介绍如何在ASP.NET Core项目中实现单文件和多文件的上传功能。 ### 单文件上传 单文件上传的实现通常涉及到前端HTML表单和后端控制器的处理。以下是一个简单的步骤: 1. 创建项目:首先,我们需要创建一个新的ASP.NET Core Web应用程序项目。 2. 添加控制器和视图:在`Controllers`目录下创建一个名为`HomeController`的控制器,并在`Views/Home`目录下添加一个名为`New.cshtml`的视图文件。 3. 定义模型:在`Models`目录下创建`UserViewModel.cs`文件,定义一个包含上传文件属性的模型类,例如: ```csharp public class UserViewModel { [Required] [Display(Name = "姓名")] public string Name { get; set; } [Required] [Display(Name = "身份证")] [RegularExpression(@"^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$", ErrorMessage = "身份证号不合法")] public string IdNum { get; set; } public string IdCardImgName { get; set; } [Required] [Display(Name = "身份证附件")] [FileExtensions(Extensions = ".jpg,.png", ErrorMessage = "图片格式错误")] public IFormFile IdCardImg { get; set; } } ``` 这里的`IFormFile`接口代表了上传的文件,`FileExtensions`数据注解用于验证文件类型。 4. 创建视图:在`New.cshtml`中,使用`@model`指令指定`UserViewModel`作为视图模型,然后创建一个`<form>`元素,设置`enctype="multipart/form-data"`以支持文件上传,`method="post"`表示使用POST方法提交表单: ```html @model UserViewModel <form asp-controller="Home" role="form" asp-action="New" enctype="multipart/form-data" method="post"> <!-- 表单字段 --> <div class="form-group"> <label asp-for="Name"></label> <input type="text" class="form-control" asp-for="Name" /> </div> <!-- 其他表单字段... --> <div class="form-group"> <label asp-for="IdCardImg"></label> <input type="file" class="form-control-file" asp-for="IdCardImg" /> </div> <button type="submit" class="btn btn-primary">提交</button> </form> ``` 5. 处理文件上传:在`HomeController`中,创建一个名为`New`的POST方法,接收`UserViewModel`作为参数,处理文件上传逻辑: ```csharp [HttpPost] public IActionResult New(UserViewModel model) { if (ModelState.IsValid) { // 检查文件是否为空 if (model.IdCardImg != null) { // 保存文件到服务器 var fileName = Path.GetFileName(model.IdCardImg.FileName); var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/uploadedFiles", fileName); model.IdCardImg.CopyTo(new FileStream(filePath, FileMode.Create)); model.IdCardImgName = fileName; } // 保存其他模型数据... return RedirectToAction("Success"); } else { return View(model); } } ``` 在上面的代码中,我们检查了文件是否有效,然后将其保存到服务器的特定目录下(这里假设有一个`wwwroot/uploadedFiles`的目录)。模型中的其他属性也可以根据需要进行处理。 ### 多文件上传 对于多文件上传,只需要在视图中添加多个`<input type="file">`元素,并在后端处理多个`IFormFile`实例。例如,在`UserViewModel`中添加一个`List<IFormFile>`属性: ```csharp public List<IFormFile> AdditionalFiles { get; set; } ``` 然后在视图中添加对应的文件选择输入: ```html <div class="form-group"> <label asp-for="AdditionalFiles">附加文件</label> <input type="file" class="form-control-file" asp-for="AdditionalFiles" multiple /> </div> ``` 在后端处理时,遍历`AdditionalFiles`列表并分别保存每个文件。 ### 总结 ASP.NET Core 提供了简单易用的API来处理文件上传,无论是单个文件还是多个文件,开发者可以通过`IFormFile`接口轻松地获取和处理上传的数据。通过前端的HTML表单和后端的控制器方法配合,可以构建出功能完备的文件上传功能。在实际应用中,还需要考虑错误处理、文件大小限制、文件存储策略等细节问题,以确保系统的稳定性和安全性。