abp vnext + MinIO(四)实现大文件上传

开发工具:vs2022企业版

框架:abp vnext 3.1

操作系统:windows11

MinIO上传功能已经实现了,请参考这篇文章:MinIO (二) .net core中实现上传下载

通过反编译MinIO上传方法,如果上传的文件超过5M,会自动进行分片上传,上传速度还是可以的。

但是有个问题,net限制了上传的大小,只能上传25M上下的文件,如果上传一个八十多兆的文件,swagger接口报错,如果前端调用上传接口,会报CORS跨域错误,这篇文章介绍怎么解决这个问题。

1、Request body too large 错误

Post的body大概超过30m就会报这个错误,完整的错误是Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Request body too large

解决方法:全局增加请求body的大小,在Program.cs文件中增加配置:

options.Limits.MaxRequestBodySize = 1024 * 1024 * 500;//500MB

internal static IHostBuilder CreateHostBuilder(string[] args)
{
    return Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            //设置请求体大小
            webBuilder.ConfigureKestrel((context, options) =>
            {
                options.Limits.MaxRequestBodySize = 1024 * 1024 * 500;//500MB
            });

            webBuilder.UseStartup();
        })

        .UseAutofac()
        .UseSerilog();
}

2、Multipart body length limit 134217728 exceeded 错误

Post的body大概超过100多M会碰到这个错误,完整的错误信息是 System.IO.InvalidDataException: Multipart body length limit 134217728 exceeded. 。
解决的方法是在startup.cs添加代码:

public void ConfigureServices(IServiceCollection services)
{
    var configuration = services.GetConfiguration();
    var appSettings = configuration.GetSection("AppSettings").Get();

    services.AddApplication(options =>
    {
        options.Services.AddObjectAccessor(appSettings);
    });
    //设置表单的最大值
    services.Configure(x =>
    {
        //x.ValueLengthLimit = int.MaxValue;
        x.MultipartBodyLengthLimit = 1024 * 1024 * 500;//500MB
    });
}

到这里,设置完成后,通过swagger调用接口上传两百多兆的文件是没问题的,但是通过前端调接口上传依然报CORS跨域错误,我们的项目用的是IIS,所以还要设置IIS对文件的限制,有两步。

abp vnext + MinIO(四)实现大文件上传_第1张图片

abp vnext + MinIO(四)实现大文件上传_第2张图片

把“最大请求实体主体限制”200000改大,这里限制了最大上传是200K,可以在后面加3个0,200000000则限制大小变为约200M

这里设完后,还有一个地方需要在设一下,回到点击站点,双击“请求筛选”,如下图

abp vnext + MinIO(四)实现大文件上传_第3张图片

进去后点击右边的编辑功能设置,下图

abp vnext + MinIO(四)实现大文件上传_第4张图片这里的300000000是限制上传约30M,适当的改大,后面加一个0就是限制约300M。

至此,通过前端调用上传接口,上传256M的文件30s成功。

你可能感兴趣的:(.net,core,MinIO,.netcore)