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请求到以下地址:
http://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中,无论是单文件还是多文件上传,从配置、验证到保存,整个流程都相当清晰。关键在于配置好请求限制,并在控制器中对文件类型和大小做好严格的校验。把这些点都掌握好,实现一个健壮的文件上传功能就不是什么难事了。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Ubuntu系统下使用Go语言实现机器学习的实践指南
在Ubuntu上使用Go进行机器学习需先安装环境并配置工作空间,通过goget获取golearn等库。编写代码遵循数据加载、模型训练、预测评估的流程后运行程序。Go在性能与并发方面有优势,但生态不如Python丰富,更适合特定工程场景或统一技术栈的团队探索。
Ubuntu系统下Go语言程序打包方法与核心要点
在Ubuntu中打包Go应用需关注环境配置、交叉编译与优化。通过GoModules管理依赖,使用CGO_ENABLED=0生成静态二进制文件以实现跨平台兼容。利用UPX和链接器参数减小体积,采用Docker多阶段构建制作最小镜像。交付时建议包含平台信息并签名,注意解决动态库依赖和版本锁定等常见问题。
Android开发中高效管理多个CheckBox组件的实用技巧
在Android应用开发过程中,高效管理多个功能相似的复选框(CheckBox)是提升开发效率的关键。无论是应用设置界面、多选列表,还是动态生成的选项列表,如果对每个CheckBox都进行单独引用和操作,代码会迅速变得冗长且难以维护。那么,是否存在更优雅的解决方案?答案是肯定的——通过数组或动态集合
面向对象编程中封装字段如何提升代码安全性与维护性
将类的公共字段改为私有,并提供公共的获取和设置方法,是提升代码安全性与可控性的基础重构。此举能防止外部随意读写,避免状态失控,并便于后续加入校验、脱敏等控制逻辑,适用于核心业务或敏感字段。
Master-Worker架构解析如何实现并发任务的负载均衡与结果高效合并
Master-Worker架构的核心在于实现任务划分、动态负载均衡与可靠结果合并的协同:任务必须具备无依赖性与可聚合性,负载需依据节点实时能力进行动态分配,结果合并则需通过唯一ID、版本号及超时重试机制确保不丢失、保顺序、容故障。 构建一个高性能的Master-Worker并发架构,核心在于系统性地
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

