当我们在IIS中新建一个站点之后,默认情况下,文件上传的最大字节是30000000,也就是30M.具体的查看方法如下:

1、选择站点,点击配置管理器

2、在配置管理器界面选择system.webServer/security/requestFiltering ,查看maxAllowedContentLength的值,我们可以看到默认是30000000。

当我们打开配置管理器的时候,IIS会在我们的站点目录下新建一个web.config文件,我们可以直接修改这个web.config文件或者在iis的配置编辑器界面上修改。当然我个人习惯于在iis界面上修改,毕竟 iis已经帮助我们把所有的配置项都预备好了,我们只需要直接设置一下值就可以。

文章中,我的站点名称叫做siteme,发布在D:\wwwroot\siteme目录,我们可以在这个目录下有个web.config。这个文件主要就是给iis相关的配置文件。

那如何设置.net core 6站点文件的最大上传大小呢,如果我们的站点是部署在IIS上,那么直接设置system.webServer/security/requestFiltering的maxAllowedContentLength属性值,单位是字节,比如说说最大可以上传1G的文件,可以设置这个值为1073741824。

当然我们只是设置了IIS服务器软件允许的上传的最大字节数,但是.NETCORE站点本身也不允许上传很大的文件,所以我们要对.NETCORE站点允许上传的文件大小做一个设置。具体在Program.cs文件中做如下配置:

//设置Kestrel服务器允许上传的最大字节数
builder.Services.Configure<KestrelServerOptions>(options =>
{
    options.Limits.MaxRequestBodySize = 1073741824;
});
//设置Http请求时Form表单上传最大字节为为1G
builder.Services.Configure<FormOptions>(x =>
{
    x.MultipartBodyLengthLimit = 1073741824;
    x.ValueLengthLimit = 1073741824;
});

当然,在Program.cs中的配置会应用到所有的请求上,通常情况下,我们只是希望个别请求放开请求体的大小限制,这个时候可以直接在请求的方法上加两个属性就可以了。RequestSizeLimit和RequestFormLimits属性 。

RequestSizeLimit:表示整个Http请求体的大小限制。

RequestFormLimits:表示Form表单的大小限制。

这两个属性一定要都设置一下,否则还是会报错。

[HttpPost]
[RequestSizeLimit(100_000_000_00)] 
[RequestFormLimits(MultipartBodyLengthLimit = long.MaxValue)]
public IActionResult Upload(IFormCollection files)
{
    var file = files.Files[0];// HttpContext.Request.Form.Files.FirstOrDefault();
    string path = "d:\\" + file?.FileName;
    using (var stream = System.IO.File.Create(path))
    {
        file.CopyTo(stream);
    }
    return Json("");
}