ASP.NET Core文件上传功能实现指南 在现代Web开发中,文件上传是一项常见需求。借助ASP.NET Core框架,开发者可以相对轻松地实现这一功能,并获得灵活的配置选项。本文将逐步介绍如何在ASP.NET Core中实现文件上传,涵盖从基础操作到文件大小限制与类型校验等实用技巧。 1. 创
在现代Web开发中,文件上传是一项常见需求。借助ASP.NET Core框架,开发者可以相对轻松地实现这一功能,并获得灵活的配置选项。本文将逐步介绍如何在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表单示例,允许用户选择并上传多个文件:
文件上传
上传文件
代码说明:
fetch API将文件数据发送至upload-multiple接口。在ASP.NET Core中实现文件上传功能流程清晰,无论是单文件还是多文件场景。关键在于正确配置请求限制,并在控制器中严格校验文件类型与大小。掌握这些要点后,即可构建稳定可靠的文件上传功能。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述