.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类型,确保它们是预期的类型。
  • 对上传的文件名进行消毒,以防止路径注入攻击。
  • 检查磁盘空间,确保有足够的空间来保存上传的文件。
  • 处理可能出现的异常,如磁盘写入错误。
相关推荐
专注VB编程开发20年6 小时前
C#全面超越JAVA,主要还是跨平台用的人少
java·c#·.net·跨平台
一个帅气昵称啊16 小时前
.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成
.net·efcore·仓储模式
helloworddm18 小时前
CalculateGrainDirectoryPartition
服务器·c#·.net
步步为营DotNet19 小时前
深度剖析.NET中HttpClient的请求重试机制:可靠性提升与实践优化
开发语言·php·.net
ChaITSimpleLove20 小时前
使用 .net10 构建 AI 友好的 RSS 订阅机器人
人工智能·.net·mcp·ai bot·rss bot
专注VB编程开发20年20 小时前
vb.net宿主程序通过统一接口直接调用,命名空间要一致
服务器·前端·.net
ChaITSimpleLove1 天前
基于 .NET Garnet 1.0.91 实现高性能分布式锁(使用 Lua 脚本)
分布式·.net·lua
用户4488466710602 天前
.NET进阶——深入理解线程(2)Thread入门到精通
c#·.net
一个帅气昵称啊2 天前
.Net——AI智能体开发基于 Microsoft Agent Framework 实现第三方聊天历史存储
人工智能·microsoft·.net