You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:02:36