ASP.NET Core 6 Razor Pages上传1GB以上大文件配置问题
ASP.NET Core 4GB大文件上传配置方案
你之前配置后仍被限制在100MB以内,核心原因是漏了服务器层的请求大小限制,且之前配置的数值、特性作用位置都有问题,按以下步骤修改即可:
1. 修改Program.cs基础配置
注意int.MaxValue对应数值仅约2GB,无法满足4GB需求,需要直接写4GB对应的精确字节数4294967296,同时补充Kestrel服务器的请求上限配置,代码放在builder.Build()之前即可:
// 配置表单 multipart 上传限制 builder.Services.Configure<FormOptions>(conf => { conf.ValueLengthLimit = 4294967296; conf.MultipartBodyLengthLimit = 4294967296; conf.MemoryBufferThreshold = 4294967296; }); // 配置Kestrel服务器最大请求体大小 builder.WebHost.ConfigureKestrel(serverOptions => { serverOptions.Limits.MaxRequestBodySize = 4294967296; });
2. 修正页面模型的特性配置
之前你把请求限制特性加在OnGetAsync方法上是无效的:文件上传走POST请求,特性需要加在PageModel类上,或者对应的OnPostAsync处理方法上,不需要全局禁用请求大小限制:
// 特性加在类上,对当前页面所有请求处理方法生效 [RequestFormLimits(MultipartBodyLengthLimit = 4294967296)] [RequestSizeLimit(4294967296)] public class SiteModel : PageModel { [NotMapped] public IFormFile Upload { get; set; } public async Task<IActionResult> OnPostAsync() { // 原有文件存储逻辑 } }
3. IIS部署额外配置
如果你的服务部署在IIS上,IIS默认会先于应用拦截超过大小限制的请求,需要在项目根目录的web.config中添加请求过滤配置:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <security> <requestFiltering> <!-- 单位:字节,4GB对应值为4294967296 --> <requestLimits maxAllowedContentLength="4294967296" /> </requestFiltering> </security> </system.webServer> </configuration>
注意事项
- 不要全局使用
[DisableRequestSizeLimit]完全关闭请求大小校验,仅给需要上传大文件的接口配置明确的大小上限即可,避免恶意超大请求拖垮服务。 - 4GB文件场景下不建议继续用
IFormFile接收:IFormFile会把整个文件先缓冲到服务端内存或临时磁盘,高并发下很容易触发内存溢出、磁盘占满问题,生产环境更推荐使用分片流式上传方案。 - 你当前的前端表单写法(
enctype="multipart/form-data")是正确的,不需要额外修改。
内容的提问来源于stack exchange,提问作者Software_Architect
相关产品推荐
相关产品推荐

