解决大文件上传失败问题

一、描述

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

相关推荐
manyikaimen11 小时前
博派智能-运动控制技术-RTCP-五轴联动
c++·图像处理·qt·算法·计算机视觉·机器人·c#
武藤一雄1 天前
C# 异步回调与等待机制
前端·microsoft·设计模式·微软·c#·.netcore
乱蜂朝王1 天前
使用 C# 和 ONNX Runtime 部署 PaDiM 异常检测模型
开发语言·c#
JosieBook1 天前
【C#】VS中的 跨线程调试异常:CrossThreadMessagingException
开发语言·c#
追雨潮1 天前
BGE-M3 多语言向量模型实战:.NET C# 从原理到落地
开发语言·c#·.net
CheerWWW1 天前
GameFramework——Download篇
笔记·学习·unity·c#
格林威1 天前
ZeroMQ 在视觉系统中的应用
开发语言·人工智能·数码相机·机器学习·计算机视觉·c#·视觉检测
格林威1 天前
工业相机图像采集:如何避免多相机数据混乱
人工智能·数码相机·opencv·机器学习·计算机视觉·c#·视觉检测
武藤一雄1 天前
C#万字详解 栈与托管堆 的底层逻辑
windows·microsoft·c#·.net·.netcore