SuperAPI AI 工具集

minimal-api-file-upload

编程与开发

查看项目

更新于 10-16 00:05

技能介绍

用途:在 ASP.NET Core Minimal API(.NET 8+)中实现文件上传端点,处理 IFormFile 或 IFormFileCollection 参数,并配置大小限制、内容类型校验或大文件流式上传。不适用于 MVC 控制器(可直接用 [FromForm] IFormFile)、纯 JSON 请求,以及超过 1GB 的文件(应改用 MultipartReader 流式处理)。

主要能力与用法:

  1. 绑定:.NET 8+ 中 IFormFile 作为唯一复杂参数时自动从 multipart/form-data 绑定;与其它表单字段混用时需对所有表单参数加 [FromForm],或合并为单个 [FromForm] DTO。IFormFileCollection 同理。
  2. 大小限制:需同时配置 Kestrel 的 MaxRequestBodySize(默认 30MB)与 FormOptions.MultipartBodyLengthLimit(默认 128MB),只改一个会导致上传失败。可用 [RequestSizeLimit] 按端点覆盖,或用 [DisableRequestSizeLimit] 关闭限制。
  3. 防伪:.NET 8+ 启用 UseAntiforgery() 后,所有表单绑定端点(含文件上传)自动校验防伪令牌,缺失返回 400。纯 API 可用 .DisableAntiforgery() 显式退出;对使用 Cookie 认证的端点禁用会移除 CSRF 防护,应改为携带有效令牌。
  4. 内容校验:不能只信任扩展名或 Content-Type,需检查魔数字节(如 JPEG 为 FF D8 FF,PNG 为 89 50 4E 47),并让声明的 Content-Type 与检测结果一致。保存路径不要直接用用户文件名,应使用 Guid.NewGuid() 生成安全文件名,扩展名由校验后的内容推导,防止路径穿越。
  5. 流式上传:IFormFile 会缓冲内容并可能落盘临时文件;超大文件可用 MultipartReader 逐段读取并直接写入存储,配合 [DisableRequestSizeLimit]。

限制:资料未提供具体安装命令、包名、收费或平台信息;示例代码中的类型与命名空间需按实际项目引用。