ASP.NETCore实现高效文件上传完整示例教程
在现代Web应用中,文件上传功能常常是必不可少的
如果你正在使用ASP.NET Core,可能会发现处理文件上传不仅相对简单,还提供了相当灵活的配置空间。这篇文章将带你一步步摸清门道,从最基本的文件上传操作,到如何有效限制文件大小和验证文件类型,这些实用的技巧一个都不会少。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
1. 创建 ASP.NET Core 项目
动手之前,先确保你的机器上已经安装了.NET SDK。如果还没有,直接去官方文档下载安装就好,非常简单。
接下来,通过一行命令来创建我们的新项目:
dotnet new webapi -n FileUploadExample cd FileUploadExample
运行这条命令后,一个基于Web API的项目结构就搭建好了,我们就在这个项目中实现文件上传的核心功能。
2. 配置文件上传
2.1 配置 Startup.cs (实为 Program.cs)
这里有个细节需要注意:如果你使用的是ASP.NET Core 3.0或更高版本,项目配置的主战场已经转移到了Program.cs文件,而不是传统的Startup.cs。
首先,打开Program.cs文件,确保添加了下面这段配置,它负责控制文件上传的大小限制:
var builder = WebApplication.CreateBuilder(args); // 配置文件上传大小限制 builder.Services.Configure(options => { options.MultipartBodyLengthLimit = 10 * 1024 * 1024; // 设置文件上传大小限制为 10MB }); var app = builder.Build(); // 配置 HTTP 请求管道 app.UseHttpsRedirection(); app.MapControllers(); app.Run();
2.2 创建文件上传控制器
接下来,在Controllers目录下新建一个控制器FileUploadController.cs,文件上传的业务逻辑就靠它来承载了。
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Threading.Tasks;
namespace FileUploadExample.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class FileUploadController : ControllerBase
{
// 上传文件的 API
[HttpPost("upload")]
public async Task UploadFile(IFormFile file)
{
if (file == null || file.Length == 0)
{
return BadRequest("未选择文件");
}
// 限制文件类型(例如只允许上传 .jpg 和 .png 文件)
var allowedExtensions = new[] { ".jpg", ".jpeg", ".png" };
var extension = Path.GetExtension(file.FileName).ToLowerInvariant();
if (!allowedExtensions.Contains(extension))
{
return BadRequest("只允许上传 JPG 和 PNG 格式的文件");
}
// 限制文件大小(例如文件大小不能超过 5MB)
if (file.Length > 5 * 1024 * 1024)
{
return BadRequest("文件大小不能超过 5MB");
}
// 保存文件到服务器指定路径
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "UploadedFiles", file.FileName);
// 确保目标目录存在
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
// 保存文件
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
return Ok(new { FilePath = filePath });
}
}
}
代码解析:
- 文件大小限制:通过检查
file.Length来判断文件的大小是否超过指定的最大限制。我们设定文件大小限制为 5MB。 - 文件类型验证:通过文件的扩展名判断文件类型,只允许上传
.jpg,.jpeg, 和.png格式的图片文件。 - 保存文件:将文件保存在服务器本地,文件保存在
UploadedFiles文件夹中。你可以根据需求修改保存路径。 - 返回响应:上传成功后,返回文件的存储路径。
2.3 测试上传接口
实现之后,当然要跑起来看看效果。在命令行里运行:
dotnet run
项目启动后,打开Postman或其他你顺手的API测试工具,发送一个POST请求到以下地址:
https://localhost:5000/api/fileupload/upload
记得在请求中,将一个文件作为file参数附加上去。如果一切顺利,你会收到类似这样的响应,告诉你文件存到哪里去了:
{
"filePath": "D:\\netcore\\example.jpg"
}
3. 处理多文件上传
单个文件上传是基础,但实际场景中,一次上传多个文件的需求也很常见。好消息是,ASP.NET Core对多文件上传的支持同样十分便捷。
3.1 修改 FileUploadController 以支持多文件上传
[HttpPost("upload-multiple")]
public async Task UploadMultipleFiles(IFormFile[] files)
{
if (files == null || files.Length == 0)
{
return BadRequest("未选择任何文件");
}
foreach (var file in files)
{
// 限制文件类型
var allowedExtensions = new[] { ".jpg", ".jpeg", ".png" };
var extension = Path.GetExtension(file.FileName).ToLowerInvariant();
if (!allowedExtensions.Contains(extension))
{
return BadRequest("只允许上传 JPG 和 PNG 格式的文件");
}
// 限制文件大小
if (file.Length > 5 * 1024 * 1024)
{
return BadRequest("文件大小不能超过 5MB");
}
// 保存文件
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "UploadedFiles", file.FileName);
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
return Ok(new { Message = "文件上传成功" });
}
代码解析:
- 多文件上传:通过
IFormFile[] files接收多个文件。 - 每个文件都会进行相同的类型验证和大小限制。
- 所有文件都将保存到
UploadedFiles文件夹中。
4. 前端实现
后端准备好了,前端也得跟上。这里给出一个极简的HTML表单示例,允许用户选择并上传多个文件:
文件上传
上传文件
代码解析:
- FormData:
FormData对象允许你轻松地将表单数据(包括文件)发送到服务器。 - 使用
fetch发送文件数据到upload-multipleAPI。
5. 小结
可以看到,在ASP.NET Core中,无论是单文件还是多文件上传,从配置、验证到保存,整个流程都相当清晰。关键在于配置好请求限制,并在控制器中对文件类型和大小做好严格的校验。把这些点都掌握好,实现一个健壮的文件上传功能就不是什么难事了。
热门专题
热门推荐
小牛电动车充电口防水设计解析 说到小牛电动车的充电口,你会发现主流车型都配备了基础的防水设计。比如,GOVA F0把充电接口藏在了座垫前端的下方,还加了个透明的防护盖;而G400T呢,则把带盖的充电口集成在了前面储物盒的左侧。其实,眼下在售的不少车型都采用了类似思路——一个可开合的物理防护盖,配上密
鼠标宏的开启与关闭必须通过品牌官方驱动软件完成,无法依赖系统级通用设置或硬件盲操作。 你得知道,鼠标宏的开关,真不是靠系统设置或者硬件上瞎按几下就能搞定的,这事儿必须过官方驱动这一关。以罗技G系列为例,整个流程很明确:先安装好Logitech G HUB,等它识别出你的设备,然后到按键配置页面,给指
小米移动电源开关与启停全攻略:物理按键、智能感知与无线控制 想快速用上充电宝的电,或者想让它安静休眠节省电量?其实答案,就在那个小小的电源按键上。小米移动电源的开关机逻辑,可以说是兼顾了极简操作与智能管理,我们常听到的“无感交互”理念,在这里体现得淋漓尽致。下面咱们就来拆解一下,从基础操作到高级玩法
是的,恢复出厂设置后,TP-Link路由器里的宽带账号密码会被清空 没错,一旦执行了恢复出厂设置,你保存在TP-Link路由器里的宽带账号和密码就会被彻底抹掉。这个操作可不是简单地重置一下Wi-Fi名字或者管理员密码,而是来了一次“大扫除”——WAN口配置、PPPoE拨号信息、你设置过的端口映射,还
家用充电桩安装指南:从申请到通电的全流程解析 没错,在自家车位上安装充电桩,主要绕不开三个环节:向供电公司申请用电、取得物业许可、最后完成装表接电。这事儿听起来有点繁复,但得益于这两年明确的政策引导,整个流程已经顺畅多了。国家能源局和住建部联合发布的文件,核心就是简化手续、保障权利。现在,车主只需准





