.net Core 2.0 文件上传大小限制

Posted

技术标签:

【中文标题】.net Core 2.0 文件上传大小限制【英文标题】:.net Core 2.0 File Upload Size Limit 【发布时间】:2018-11-12 06:54:18 【问题描述】:

我在 .net core 2.0 MVC Web 应用程序中上传大文件时遇到问题。

我看过一些文章,比如这篇文章,它展示了如何在 .net core 2.0 中增加文件大小限制: Increase upload request length limit in Kestrel

因此,按照示例,我尝试了这两个选项。我目前在我的 Program.cs 中有这个:

        public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseKestrel(options => options.Limits.MaxRequestBodySize = null)
            .Build();

...而我在控制器上的ajax文件上传方法如下:

    [HttpPost]
    [RequestSizeLimit(1_074_790_400)]
    [Route("api/article/uploadfile/mediaType")]
    public async Task<IActionResult> UploadFile(string mediaType)

我正在使用Request.Form.Files访问上传的文件

视图上的 javascript 如下所示:

$('#upload-videos').change(function () 
    var files = $("#upload-videos").get(0).files;
    uploadMedia(false, files);
)

function uploadMedia(isPhoto, files) 
    var type;
    if (isPhoto) 
        type = "i";
    
    else 
        type = "v";
    

    var data = new FormData();
    if (files.length > 0) 
        for (idx = 0; idx < files.length; idx++) 
                data.append("fileImage" + idx, files[idx]);
        

        $.ajax(
            url: "/api/article/uploadfile/" + type,
            type: "POST",
            processData: false,
            contentType: false,
            dataType: false,
            data: data,
            success: function (jsonData) 
                refreshUploadedImages(jsonData, isPhoto);
            
        );
    

问题是,即使进行了增加上传限制的更改,我还是得到了响应:

加载资源失败:服务器响应状态为500()

如果我在控制器方法的第一行设置断点,它永远不会命中它,所以这段代码似乎没有问题。

对于小文件大小一切正常,但是当我尝试上传大小为 538,286 KB 的文件时,它会失败。

有人可以帮忙吗?

更新: 有关更多信息,无论任何 RequestSizeLimit 设置如何,当上传文件大小介于 122,211 KB 和 137,840 KB 之间时,似乎都会出现此问题,并且始终出错。

更新 2: 我刚刚将所有 .net core 和所有 .net core nuget 包更新到 2.1,但问题仍然存在。

【问题讨论】:

如果由于文件太大,Web 服务器无法处理文件,则应该有 413 而不是 500 @Andreas 是的,这让我相信文件大小不是问题。但是,它仍然只发生在大文件上。 【参考方案1】:

为了帮助其他有同样问题的人,我在这里找到了答案: Max upload size for ASP.MVC CORE website

原来你需要像这样去掉body length限制:

services.Configure<FormOptions>(x => x.MultipartBodyLengthLimit = 1_074_790_400);

FormOptions 可以在 Microsoft.AspNetCore.Http.Features 命名空间中找到。

【讨论】:

MaxRequestBodySize要单独设置吗? 是的,如果你想允许大量下载,你仍然需要设置这个 @Slade 你还用它做了什么,因为它对我不起作用:/【参考方案2】:

要解决这个问题,您可以改用下面的代码

[禁用请求大小限制]

【讨论】:

以上是关于.net Core 2.0 文件上传大小限制的主要内容,如果未能解决你的问题,请参考以下文章

.net core 上传文件大小配置

netcoreASP.NET Core中如何更改文件上传大小限制maxAllowedContentLength属性值

在 Asp.Net core v3.1 中增加上传文件大小

增加在 Azure 上运行的 Dockerized ASP.NET Core 站点的最大上传大小限制?

如何将大文件上传到 Azure Blob 存储 (.NET Core)

在 asp.net core 2.0 中使用 angular 5 上传文件。文件为空