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

问题描述 投票:0回答:2

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

我看过一些文章,例如这篇文章,其中展示了如何增加 .NET Core 2.0 中的文件大小限制:

增加 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:我刚刚将所有ASP.NET Core和所有ASP.NET Core nuget包更新到2.1,但问题仍然存在。

javascript c# asp.net-core file-upload asp.net-core-mvc
2个回答
10
投票

为了帮助其他遇到同样问题的人,我在这里找到了答案:

ASP.NET Core MVC 网站的最大上传大小

原来你需要像这样取消身体长度限制:

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

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


4
投票

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

[禁用RequestSizeLimit]

© www.soinside.com 2019 - 2024. All rights reserved.