ASP.NET Core 2.0大文件上传解决方案咨询(超28MB默认限制)
解决.NET Core大文件上传超过28MB限制的问题
我来帮你搞定这个大文件上传的困扰!其实.NET Core默认的28MB左右的请求限制,需要从服务配置、控制器特性、服务器设置这几个层面一起调整,再配合前端的正确写法,就能解决问题。下面一步步来:
1. 在Program.cs中全局配置请求大小
如果你用的是.NET 6+的极简模式,在注册控制器服务的时候,添加全局的多部分表单长度限制:
builder.Services.AddControllers(options => { // 设置全局的多部分请求最大长度,比如设为100MB(100*1024*1024) options.MaxRequestBodySize = 104857600; }); // 可选:针对API行为做更细致的配置,避免因请求过大触发默认的模型验证拦截 builder.Services.Configure<ApiBehaviorOptions>(options => { options.SuppressModelStateInvalidFilter = true; });
2. 给控制器/上传方法添加特性限制
全局配置是基础,但最好在具体的上传方法上单独设置限制(优先级更高),比如:
using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class MediaController : ControllerBase { // 设置该方法允许的最大请求大小为100MB,同时指定多部分表单的长度限制 [RequestSizeLimit(104857600)] [RequestFormLimits(MultipartBodyLengthLimit = 104857600)] [HttpPost("Upload")] public async Task<IActionResult> Upload(List<IFormFile> files) { // 你的文件处理逻辑 return Ok(new { message = "上传成功" }); } }
3. 配置Kestrel服务器的请求大小限制
Kestrel本身也有默认的请求大小上限,所以需要在Program.cs里额外配置:
builder.WebHost.ConfigureKestrel(options => { // 设为100MB,单位为字节 options.Limits.MaxRequestBodySize = 104857600; });
4. jQuery AJAX上传的正确写法
你提到用jQuery AJAX上传,这里有几个容易踩的坑,注意以下几点:
- 不要手动设置
contentType,让jQuery自动处理multipart/form-data - 把
processData设为false,避免jQuery把FormData转换成字符串 - 确保用
FormData对象传递文件
修正后的uploadFiles函数示例:
function uploadFiles(inputId) { var input = document.getElementById(inputId); var formData = new FormData(); // 遍历选中的文件,添加到FormData for (var i = 0; i < input.files.length; i++) { formData.append('files', input.files[i]); } $.ajax({ url: '/Media/Upload', type: 'POST', data: formData, processData: false, // 关键:不要处理数据 contentType: false, // 关键:不要设置内容类型 success: function (response) { console.log('上传成功:', response); }, error: function (xhr, status, error) { console.error('上传失败:', error); } }); }
补充:部署到反向代理的额外配置
如果你的应用部署到IIS,还需要在web.config里添加请求长度限制:
<system.webServer> <security> <requestFiltering> <!-- 100MB,单位为字节 --> <requestLimits maxAllowedContentLength="104857600" /> </requestFiltering> </security> </system.webServer>
如果是Nginx,需要修改配置文件里的client_max_body_size参数,比如设为100m。
按照这些步骤配置完,应该就能顺利上传超过28MB的文件了!
内容的提问来源于stack exchange,提问作者S.K.
相关产品推荐
相关产品推荐

