解决大文件上传失败问题

一、描述

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

相关推荐
SEO-狼术4 分钟前
Include Scannable Barcodes in Reports
.net
星辰徐哥37 分钟前
Unity C#入门:Visual Studio与Unity的关联配置
unity·c#·visual studio
星辰_mya2 小时前
分布式系统里的“快递中转站”——消息队列(MQ)
c#·linq
qq_431280703 小时前
工作经验总结:半导体上位机软件开发与互联网开发的不同
c#·.net
Metaphor6923 小时前
使用 Python 查找并替换 Word 文档中的文本
python·c#·word
chen_2274 小时前
kanzi插件之节点树可视化
c#·kanzi
傻啦嘿哟4 小时前
管好PPT的“骨架”:用Python控制页面与文档属性
开发语言·javascript·c#
Densen20144 小时前
企业H5站点升级PWA (三)
前端·nginx·c#
ironinfo5 小时前
.net 高并发服务性能瓶颈排查处理
性能优化·.net·grpc
回忆2012初秋5 小时前
【.Net】一文讲清楚SonnetDB 时序库的使用
.net