ASP.NET Core实现附件上传与下载的示例详解

ASP.NET Core中,文件上传和下载是常见需求。以下是如何实现这些功能的具体步骤:

文件上传

在文件上传中,ASP.NET Core提供IFormFile接口用于处理上传文件。IFormFile代表了客户端上传的单个文件,可访问文件名、内容类型、长度以及内容读取。以下是一个典型的文件上传控制器方法:

[HttpPost("upload")]
[DisableRequestSizeLimit]  //禁用默认大小限制
[RequestSizeLimit(100 * 1024)]  //最大上传文件大小100MB
public async Task Post(List files)
{
    foreach (var file in files)
    {
        if (file.Length > 0)
        {
            var uniqueFileName = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName);
            var filePath = Path.Combine("Uploads", uniqueFileName);
            Directory.CreateDirectory(Path.GetDirectoryName(filePath));

            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }
        }
    }
    return Ok("Files uploaded successfully");
}

在这个示例中,[DisableRequestSizeLimit][RequestSizeLimit]属性控制文件大小限制,遍历files列表并为每个文件生成唯一的文件名,确保上传文件不会重名。

文件下载

文件下载的实现相对简单,核心是创建一个HTTP响应来告知浏览器下载文件。以下是一个文件下载的方法:

public IActionResult Download(string fileName)
{
    var filePath = GetFilePath(fileName); // 获取文件路径
    if (filePath == null) return NotFound();

    var stream = new FileStream(filePath, FileMode.Open);
    return File(stream, "application/octet-stream", fileName);
}

在该方法中,GetFilePath返回文件的完整路径。File方法将文件流传递给浏览器,指定MIME类型并提供下载文件名。

安全和最佳实践

  1. 验证文件大小和类型:确保文件符合预期的大小和类型,防止上传过大的文件或不安全文件。
  2. 存储安全:将文件保存在安全目录,避免公开访问。
  3. 异常处理:使用try-catch处理文件操作异常并返回友好错误。
  4. 文件命名:使用唯一ID命名文件,防止文件名冲突。
  5. 权限控制:限制用户下载权限。
  6. 流处理:使用流处理减少内存占用,避免一次性加载整个文件。

以上是ASP.NET Core中实现文件上传与下载的完整步骤和关键实践,适用于Web应用开发。

docx 文件大小:17.36KB