.NET Core 7姿态检测应用大视频文件上传失败求助
解决.NET Core 7大视频文件上传失败问题
针对你遇到的姿态检测应用无法上传超过15秒视频的问题,你已配置Kestrel和FormOptions的大小限制,但可能遗漏了几个关键环节,以下是完整解决方案:
1. 确保表单设置正确的enctype
上传文件的表单必须指定enctype="multipart/form-data",否则大文件上传会被拦截。修改你的表单代码:
@using (Html.BeginForm("你的上传动作名", "控制器名", FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.TextBoxFor(m => m.VideoFile, new {type = "file", @class = "form-control"}) <!-- 其他表单元素 --> <button type="submit">上传视频</button> }
2. 在控制器上传动作添加请求大小限制特性
即使全局配置了大小限制,仍需在处理上传的POST方法上添加[RequestSizeLimit]特性,确保动作层面的限制生效:
[HttpPost] [RequestSizeLimit(512 * 1024 * 1024)] // 对应512MB的限制 public async Task<IActionResult> UploadVideo(VideoUploadViewModel model) { // 你的视频上传处理逻辑 }
如果需要临时取消限制(不建议生产环境使用),可替换为[DisableRequestSizeLimit]。
3. 手动添加web.config适配IIS Express
.NET 7默认不会为新项目生成web.config,但Visual Studio使用的IIS Express依赖该文件配置请求限制。在项目根目录新建web.config文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <security> <requestFiltering> <!-- 配置最大允许请求大小为512MB(单位:字节) --> <requestLimits maxAllowedContentLength="536870912" /> </requestFiltering> </security> </system.webServer> </configuration>
4. 确认Kestrel配置顺序正确
确保Kestrel的配置代码在builder.Build()之前执行,否则配置不会生效:
var builder = WebApplication.CreateBuilder(args); // 先配置Kestrel builder.WebHost.ConfigureKestrel(options => { options.Limits.MaxRequestBodySize = 512 * 1024 * 1024; }); // 再配置FormOptions builder.Services.Configure<FormOptions>(options => { options.MultipartBodyLengthLimit = 512 * 1024 * 1024; }); // 其他服务配置... var app = builder.Build(); // 中间件配置... app.Run();
额外检查项
- 确认没有其他自定义中间件或第三方组件(如限流、安全中间件)拦截大请求
- 测试时可先上传一个大小明确的测试文件(比如100MB),验证限制是否生效
内容的提问来源于stack exchange,提问作者Aroosh Ahmad
相关产品推荐
相关产品推荐

