.NET Core 实现文件上传下载详解

0 下载量 51 浏览量 更新于2024-08-04 收藏 17KB DOCX 举报
“ASP.NET编程知识——.NET Core下附件上传下载的实现示例” 在ASP.NET框架中,尤其是在其最新版本.NET Core中,文件上传和下载是常见的功能需求。这篇文档将详细介绍如何在.NET Core环境下处理文件上传和下载操作。 一、文件上传 在.NET Core中,文件上传主要通过`IFormFile`接口来处理。这个接口允许我们从HTTP请求中获取上传的文件。以下是一个简单的文件上传控制器方法的示例: ```csharp [HttpPost("upload")] [RequestSizeLimit(100 * 1024 * 1024)] // 设置文件大小限制为100MB public async Task<IActionResult> Post(List<IFormFile> files) { try { if (files == null || !files.Any()) return NotFound(new ResponseFileResult { Result = false, Code = ResponseCode.InvalidParameters, ErrorMessage = "附件不能为空" }); string filePath = Path.Combine(Directory.GetCurrentDirectory(), "BASEFILE", "Template"); if (!Directory.Exists(filePath)) Directory.CreateDirectory(filePath); var result = new ResponseFileResult(); var fileList = new List<FileResultModel>(); foreach (var file in files) { var fileModel = new FileResultModel(); var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'); var newName = Guid.NewGuid().ToString() + Path.GetExtension(fileName); var fileFullPath = Path.Combine(filePath, $@"{newName}"); using (FileStream fs = new FileStream(fileFullPath, FileMode.Create)) { await file.CopyToAsync(fs); fileModel.Name = newName; fileList.Add(fileModel); } } result.Result = true; result.Files = fileList; return Ok(result); } catch (Exception ex) { return StatusCode(StatusCodes.Status500InternalServerError, ex.Message); } } ``` 在这个例子中,我们首先检查是否有文件上传,并设置了一个100MB的文件大小限制。然后,我们创建一个用于存储文件的目录(如果不存在的话)。对于每个上传的文件,我们生成一个新的唯一文件名,将文件保存到指定路径,并将相关信息添加到响应结果中。 二、文件下载 文件下载通常涉及生成一个HTTP响应,包含指向要下载文件的URL或直接提供文件内容。以下是一个简单的文件下载控制器方法的示例: ```csharp [HttpGet("download/{filename}")] public IActionResult Download(string filename) { string filePath = Path.Combine(Directory.GetCurrentDirectory(), "BASEFILE", "Template", filename); if (!System.IO.File.Exists(filePath)) return NotFound(); var fileBytes = System.IO.File.ReadAllBytes(filePath); var contentType = MimeMapping.GetMimeMapping(filename); return File(fileBytes, contentType, filename); } ``` 在这个例子中,我们根据传入的文件名查找文件,读取文件内容到字节数组,然后返回一个`FileResult`,指定文件类型(MIME类型)和建议的文件名,供浏览器下载。 总结 在.NET Core中处理文件上传和下载,我们需要理解`IFormFile`接口的使用,以及如何通过流操作来处理文件内容。同时,要注意设置适当的文件大小限制以防止恶意大文件上传,确保文件路径的安全性,以及正确处理可能的异常情况。文件下载时,我们可以通过HTTP响应来提供文件内容,让浏览器触发下载行为。这些基础技巧在构建任何支持文件操作的ASP.NET Core应用程序时都至关重要。