.NET 9 中 IFormFile 的详细使用讲解

在.NET应用程序中,处理文件上传是一个常见的需求。.NET 9 提供了 IFormFile 接口,它可以帮助我们轻松地处理来自客户端的文件上传。以下是 IFormFile 的详细使用讲解。

IFormFile 接口简介

IFormFile 是一个表示上传文件的接口,它提供了以下属性和方法:
ContentType: 获取上传文件的MIME类型。
ContentDisposition: 获取与文件关联的Content-Disposition数据。
Headers: 获取与文件关联的HTTP头。
Length: 获取上传文件的大小(以字节为单位)。
Name: 获取上传文件的名称。
FileName: 获取上传文件的完整文件名。
CopyToAsync(Stream): 将文件内容异步复制到指定的流中。

在控制器中使用 IFormFile

以下是如何在ASP.NET Core MVC控制器中使用 IFormFile 的步骤。

1. 创建控制器

首先,创建一个控制器,例如 FileUploadController。

cs 复制代码
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class FileUploadController : ControllerBase
{
    // ...
}

2. 接收文件上传

在控制器中添加一个方法来接收上传的文件。

cs 复制代码
[HttpPost("upload")]
public async Task<IActionResult> UploadFile(IFormFile file)
{
    if (file == null || file.Length == 0)
    {
        return BadRequest("No file uploaded.");
    }
    // 处理文件
    var filePath = Path.Combine(Directory.GetCurrentDirectory(), "UploadedFiles", file.FileName);
    using (var stream = new FileStream(filePath, FileMode.Create))
    {
        await file.CopyToAsync(stream);
    }
    return Ok(new { fileName = file.FileName, size = file.Length });
}

3. 处理多个文件上传

如果你需要接收多个文件,可以修改方法以接受 IFormFile 数组。

cs 复制代码
[HttpPost("upload-multiple")]
public async Task<IActionResult> UploadMultipleFiles(IList<IFormFile> files)
{
    long size = files.Sum(f => f.Length);
    foreach (var file in files)
    {
        var filePath = Path.Combine(Directory.GetCurrentDirectory(), "UploadedFiles", file.FileName);
        using (var stream = new FileStream(filePath, FileMode.Create))
        {
            await file.CopyToAsync(stream);
        }
    }
    return Ok(new { count = files.Count, size });
}

4. 配置请求大小限制

默认情况下,ASP.NET Core 限制了请求的大小。如果你需要上传大文件,你可能需要配置这个限制。在 Startup.cs 或 Program.cs 中配置以下内容:

cs 复制代码
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    // 配置文件上传大小限制
    services.Configure<FormOptions>(options =>
    {
        options.MultipartBodyLengthLimit = 1024 * 1024 * 500; // 500MB
    });
}

5. 安全性和错误处理

在处理文件上传时,应该考虑以下安全性和错误处理措施:

  • 验证上传文件的MIME类型,确保它们是预期的类型。
  • 对上传的文件名进行消毒,以防止路径注入攻击。
  • 检查磁盘空间,确保有足够的空间来保存上传的文件。
  • 处理可能出现的异常,如磁盘写入错误。
相关推荐
学以智用2 天前
C# Console App(控制台应用)模板详解
.net
宝桥南山3 天前
.NET 11 - 尝试一下Minimal API中的异步验证新特性
microsoft·微软·c#·asp.net·.net·.netcore
无风听海3 天前
深入理解.NET中的 Lazy<T>
服务器·php·.net
海盗12343 天前
微软技术日报 2026-10-14:十月补丁 1411 个漏洞,.NET 11 交出 RC2
人工智能·microsoft·机器人·aigc·.net
学以智用3 天前
.NET WinForms / WPF / Blazor 模板详解
.net
黄一一9112433 天前
吾爱大佬开发,离线可用!PDF文件处理工具,本地网页版文件-浏览器里就能搞定,所有操作系统可用
windows·安全·阿里云·pdf·.net·开源软件
慧都小妮子4 天前
MSG 附件太占内存?Aspose.Email for .NET 26.9 延迟加载
c#·.net·aspose·内存优化·延迟加载·aspose.email·附件内存
学以智用4 天前
ASP.NET Core 项目模板详解:Web应用 / Web API / MVC / Razor Pages
.net
IT规划师5 天前
MQTT实战 - 用了8年MQTT,我为什么还要重新系统啃一遍(一)
物联网·.net