ASP.NET Core 文件上传基于 IFormFile 接口,支持单文件、多文件及大文件流式处理;需设置 enctype="multipart/form-data",后端校验空文件、大小、扩展名、MIME 类型,并用随机文件名防止路径遍历。

ASP.NET Core 上传文件主要通过 IFormFile 接口实现,它封装了 HTTP 表单中上传的单个文件数据。核心思路是:前端用 <input type="file"> 提交,后端在控制器方法中接收 IFormFile 或 IFormFileCollection 参数,再读取、验证、保存。
基础单文件上传(IFormFile)
这是最常用的方式,适用于上传一个文件(如头像、单个文档)。
- 确保 HTML 表单使用
enctype="multipart/form-data",否则文件不会被发送 - 控制器方法参数直接声明为
IFormFile,框架会自动绑定 - 检查
file != null && file.Length > 0避免空上传 - 推荐用
Path.GetRandomFileName()生成安全文件名,避免路径遍历或重名
示例代码:
后端 Action:
[HttpPost]public async Task
{
if (file == null || file.Length == 0)
return BadRequest("请选择文件");
var uploadsRoot = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "uploads");
Directory.CreateDirectory(uploadsRoot);
var fileName = Path.GetRandomFileName() + Path.GetExtension(file.FileName);
var filePath = Path.Combine(uploadsRoot, fileName);
using var stream = new FileStream(filePath, FileMode.Create);
await file.CopyToAsync(stream);
return Ok(new { FileName = fileName });
}
多文件上传(IFormFileCollection)
当需要一次上传多个文件(如批量图片),前端 input 的 name 属性要一致,并加 multiple 属性。
- 后端接收类型改为
IFormFileCollection - 逐个遍历处理,注意总大小限制(比如所有文件加起来不超过 100MB)
- 可结合
ModelState.IsValid或手动校验扩展名、MIME 类型
对应 Action:
标签: html 前端 浏览器 字节 后端 ai pdf stream .net
还木有评论哦,快来抢沙发吧~