您的位置:首页 >ASP.NETCore中实现高效的文件上传的示例代码
发布于2026-05-03 阅读(0)
扫一扫,手机访问
如果你正在使用ASP.NET Core,可能会发现处理文件上传不仅相对简单,还提供了相当灵活的配置空间。这篇文章将带你一步步摸清门道,从最基本的文件上传操作,到如何有效限制文件大小和验证文件类型,这些实用的技巧一个都不会少。
动手之前,先确保你的机器上已经安装了.NET SDK。如果还没有,直接去官方文档下载安装就好,非常简单。
接下来,通过一行命令来创建我们的新项目:
dotnet new webapi -n FileUploadExample cd FileUploadExample
运行这条命令后,一个基于Web API的项目结构就搭建好了,我们就在这个项目中实现文件上传的核心功能。
这里有个细节需要注意:如果你使用的是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();
接下来,在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 文件夹中。你可以根据需求修改保存路径。实现之后,当然要跑起来看看效果。在命令行里运行:
dotnet run
项目启动后,打开Postman或其他你顺手的API测试工具,发送一个POST请求到以下地址:
http://localhost:5000/api/fileupload/upload
记得在请求中,将一个文件作为file参数附加上去。如果一切顺利,你会收到类似这样的响应,告诉你文件存到哪里去了:
{
"filePath": "D:\\netcore\\example.jpg"
}
单个文件上传是基础,但实际场景中,一次上传多个文件的需求也很常见。好消息是,ASP.NET Core对多文件上传的支持同样十分便捷。
[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 文件夹中。后端准备好了,前端也得跟上。这里给出一个极简的HTML表单示例,允许用户选择并上传多个文件:
文件上传
上传文件
代码解析:
FormData 对象允许你轻松地将表单数据(包括文件)发送到服务器。fetch 发送文件数据到 upload-multiple API。可以看到,在ASP.NET Core中,无论是单文件还是多文件上传,从配置、验证到保存,整个流程都相当清晰。关键在于配置好请求限制,并在控制器中对文件类型和大小做好严格的校验。把这些点都掌握好,实现一个健壮的文件上传功能就不是什么难事了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9