You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 04:57:18