当我们在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("");
}