ASP.NET Core 2.0 文件上传下载实战:模型绑定与多文件上传

17 下载量 93 浏览量 更新于2024-08-28 收藏 176KB PDF 举报
ASP.NET Core文件上传与下载实例教程,涵盖了多种文件上传方式,包括使用模型绑定进行文件上传。 在ASP.NET Core中,文件上传是一项常见的功能,尤其在处理用户提交的图片、文档等数据时非常实用。本教程将介绍如何在ASP.NET Core 2.0及更高版本中实现文件上传和下载。 首先,我们来看如何使用模型绑定上传文件。官方文档提供了一个简单的例子,但机器翻译的质量并不理想,建议直接阅读英文原文。要实现文件上传,你需要在HTML视图中创建一个`<form>`标签,并设置`method="post"`和`enctype="multipart/form-data"`,这允许表单包含二进制数据,如文件。同时,添加`multiple`属性支持上传多个文件: ```html <form method="post" enctype="multipart/form-data" asp-controller="UpLoadFile" asp-action="FileSave"> <div> <div> <p>Form表单多个上传文件:</p> <input type="file" name="files" multiple /> <input type="submit" value="上传" /> </div> </div> </form> ``` 这里的`asp-controller`和`asp-action`用于指定控制器和动作方法,即处理文件上传的地方。 接下来,创建一个控制器,定义一个处理文件上传的方法,例如`FileSave`。此方法接收一个`List<IFormFile>`参数,`IFormFile`接口代表了上传的文件。以下是一个简单的示例: ```csharp public async Task<IActionResult> FileSave(List<IFormFile> files) { var allFiles = Request.Form.Files; long totalSize = files.Sum(f => f.Length); string webRootPath = _hostingEnvironment.WebRootPath; string contentRootPath = _hostingEnvironment.ContentRootPath; foreach (var formFile in files) { if (formFile.Length > 0) { string fileExt = GetFileExt(formFile.FileName); // 获取文件扩展名,不含“.” long fileSize = formFile.Length; // 实现文件保存逻辑,如检查文件类型、大小,以及将文件保存到服务器的指定位置。 // ... } } // 返回操作结果,如成功消息或错误信息。 return RedirectToAction("Success"); } ``` 在上述代码中,`_hostingEnvironment`是一个依赖注入的对象,用于获取应用的Web根目录和内容根目录,这通常用于存储上传的文件。记得在保存文件前进行必要的验证,比如检查文件大小和类型,防止恶意文件上传。 至于文件下载,ASP.NET Core也提供了便捷的API。你可以创建一个返回文件的动作方法,使用`File`或`FileStreamResult`来生成响应。以下是一个简单的文件下载示例: ```csharp public IActionResult Download(string fileName) { string filePath = Path.Combine(webRootPath, "uploads", fileName); if (System.IO.File.Exists(filePath)) { return File(filePath, "application/octet-stream", fileName); } else { return NotFound($"文件'{fileName}'不存在."); } } ``` 在这个例子中,`Download`方法会查找指定路径的文件并将其作为二进制流返回给客户端,同时设置响应的MIME类型和文件名。 总结起来,ASP.NET Core提供了强大的文件上传和下载功能,通过模型绑定和HTTP响应,开发者可以轻松地处理文件操作。在实际项目中,应根据需求进行更复杂的错误处理和优化,确保文件操作的安全和性能。