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

13

我在一个 .net core 2.0 MVC 网络应用程序中上传大文件时遇到了问题。

我看了一些文章,比如这篇文章,它展示了如何增加 .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的文件时,它会失败。

有人能帮忙解决这个问题吗?

更新: 进一步了解,当上传文件大小在122,211 KB和137,840 KB之间时,问题似乎会发生,而无论任何RequestSizeLimit设置,它都会产生错误。

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


如果Web服务器无法处理文件因为它太大,应该返回413而不是500 - Andreas
@Andreas 是的,这让我相信文件大小不是问题所在。然而,它仍然只发生在大文件上。 - Slade
2个回答

10
为了帮助其他有同样问题的人,我在这里找到了答案:ASP.MVC CORE 网站的最大上传大小
原来需要像这样移除正文长度限制:
services.Configure<FormOptions>(x => x.MultipartBodyLengthLimit = 1_074_790_400);

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


MaxRequestBodySize需要单独设置吗? - jAC
1
是的,如果您想允许大文件下载,仍然需要设置这个。 - Slade
@Slade,你还做了什么,因为它对我不起作用 :/ - Ahmad

4
为解决这个问题,您可以使用以下代码:

[DisableRequestSizeLimit]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接