解决大文件上传失败问题

一、描述

项目后端.net6.0(即 ASP.NET Core 6.0 ,托管在 IIS 上),前端VUE+Element Plus。在项目中做的文档管理模块,需要上传文档,用户上传不到50MB文件发现出错,文件上传失败,接口没有响应。还没进到接口就已经出错了,考虑过是前端的限制element不支持或后端代码限制了大文件的传输,发现不是;寻找了网上的解决方案,发现是 IIS 中上传文件大小限制住了。

参考:https://www.cnblogs.com/bribe/p/17898926.html

IIS10默认上传文件大小为28.6MB,若需要上传的文件超过限制则需要手动修改配置。

二、解决方案

1.修改IIS配置

  • 选中网站,双击对应的"配置编辑器"
  • 在"节(s):"输入system.webServer/security/requestFiltering,找到"requestLimits"中的"maxAllowedContentLength",修改成需要限制的文件大小(此处指的是字节bytes,我这里设置1000000000约等于1G)

2.修改项目中web.config文件(上面的操作也可以通过修改项目中web.config文件来实现)

  • 确认后端技术栈:✅如果是 ASP.NET Framework

在 .NET Framework 中,有两个关键限制:

  1. IIS 的 maxAllowedContentLength
  2. ASP.NEThttpRuntime.maxRequestLength (单位:KB!)
XML 复制代码
<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="1000000000" />
    </requestFiltering>
  </security>
</system.webServer>
 <!-- 注意maxRequestLength单位是KB;注:.NET Framework 内部限制maxRequestLength 约 2G -->
 <!-- 最好增加executionTimeout超时时间 -->
<system.web>
  <httpRuntime maxRequestLength="1000000" executionTimeout="3600" shutdownTimeout="900" />
</system.web>
  • 确认后端技术栈:✅如果是 ASP.NET Core

ASP.NET Core 不读取 httpRuntime,需在代码中配置:

IIS 的 **web.config**仍需保留:

XML 复制代码
<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="1000000000" />
    </requestFiltering>
  </security>
</system.webServer>

② 同时,在 **Program.cs**中添加:(如果此处不加默认是128MB)

cs 复制代码
// 【ASP.NET Core 应用层】在 Program.cs 中提高上传限制
// 增加文件上传大小限制(200MB = 200 * 1024 * 1024 字节)
builder.Services.Configure<FormOptions>(options =>
{
    options.MultipartBodyLengthLimit = 1000000000; // 最大请求体大小1G(MultipartBodyLengthLimit 单位:字节)
    options.ValueLengthLimit = 1000000000;         // 单个表单项值长度(如 base64)
    options.KeyLengthLimit = 1000000000;
});
// 如果你使用的是非表单上传(比如 raw body),还需要配置 Kestrel
builder.WebHost.ConfigureKestrel(serverOptions =>
{
    serverOptions.Limits.MaxRequestBodySize = 1_000_000_000; // 1GB
});

✅ 额外建议:延长超时时间

ASP.NET FrameworkexecutionTimeout="3600"(已包含在上面配置中)

ASP.NET Core :Kestrel 默认无超时,但 IIS 作为反向代理有默认超时(2分钟),可通过 web.config 调整:

XML 复制代码
<system.webServer>
  <handlers>
    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
  </handlers>
  <aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
    <requestTimeout value="00:20:00" /> <!-- 20分钟 -->
  </aspNetCore>
</system.webServer>

三、总结

  1. 确保 IIS 的 maxAllowedContentLength ≥ 文件大小(字节)
  2. 确认后端是 .NET Framework 还是 Core
  3. 如果是 Framework → 检查 web.config 是否包含 httpRuntime.maxRequestLength
  4. 如果是 Core → 检查 Program.cs 是否设置了 FormOptions.MultipartBodyLengthLimit

修改完成后 重新部署并重启 IIS(或应用池)

微软官方文档链接相关配置参考:

请求限制 &;requestLimits> |Microsoft Learn

在 ASP.NET 核心上传文件 |Microsoft Learn

web.config 文件 |Microsoft Learn

相关推荐
FuckPatience3 小时前
C# 对象初始化器对属性赋值vs构造函数里对属性赋值
c#
m0_748233174 小时前
C语言vsC#:核心差异全解析
c语言·开发语言·c#
MyBFuture5 小时前
C# 关于联合编程基础
开发语言·c#·visual studio·vision pro
Sunsets_Red5 小时前
单调队列优化dp
c语言·c++·算法·c#·信息学竞赛
故事不长丨5 小时前
《C#委托与事件深度解析:区别、联系与实战应用》
开发语言·c#·委托·事件·event
code_li6 小时前
语音播报功能 C# net4.5代码
c#·语音播报
虫小宝6 小时前
淘客返利系统的日志追踪与链路监控:SkyWalking 与 OpenTelemetry 集成方案
c#·linq·skywalking
小金子会发光6 小时前
【工业相机实战】基于 C# WinForms 的映美精(ic4)相机采集与显示全流程实现
计算机视觉·c#·视觉检测·visual studio
GfhyPpNY6 小时前
信号交叉口联网燃料电池混合动力汽车生态驾驶的双层凸优化探索
.net