解决大文件上传失败问题

一、描述

项目后端.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

相关推荐
dLNbrcWzV7 小时前
迈达斯桥梁建模与分析:探索多样桥梁结构的奥秘
.net
qq_454245038 小时前
BuildTemplateGraph 函数深度解析:动态节点图构建的架构设计与核心价值
数据结构·c#
qq_454245039 小时前
SkeletonFlow:基于组合子逻辑与范畴论的数据流处理框架
数据结构·c#
游乐码9 小时前
c#静态类和静态构造函数
开发语言·c#
net3m3311 小时前
自动分工 现象时,一共有几种可能得权重组合变化,如何确保这些组合的扫描时的不发生组合爆炸
人工智能·c#·ai编程
bugcome_com11 小时前
C# 方法详解:定义、调用与参数传递
c#
光泽雨12 小时前
AppDomain
c#
bugcome_com12 小时前
C# 可空类型(Nullable)详解
c#
大Mod_abfun14 小时前
Socket网络通信教程1(文件传输,IPv4+v6,多客户端管理,重构?)
服务器·网络·c#·socket·vb.net·文件传输
czhc114007566315 小时前
ModBus 218
c#