首页 > 解决方案 > 抛出异常:大文件上传 ASP.Net 核心上 System.Private.CoreLib.dll 中的“System.IO.InvalidDataException”

问题描述

我正在尝试使用 IIS express 服务器和 ASP.NET 核心后端上传大小为 543 MB 的文件夹。上传由 ajax 调用启动。如果我将文件夹分成 100 MB 的块并从前端上传这 100 MB 的块,一切正常。但是正如这里所指出的,我们可以将大型 ajax 调用拆分为多个较小的调用以更快地加载数据吗?拆分和拨打多个电话没有明显的优势,最终可能会成为一种负担。

所以现在我正在尝试将文件夹作为一个 ajax 调用上传。问题是上传开始了,我可以在进度条中看到它的进度,但是在上传了 30% 之后,我从服务器获得了 Http 状态代码 500。

服务器给出以下错误:
Exception thrown: 'System.IO.InvalidDataException' in System.Private.CoreLib.dll

据我了解,此问题与 IIS 和 ASP.NET 核心施加的文件大小限制有关。为了解决这个问题,我在我的解决方案中添加了以下代码,但没有成功。

上传控制器.cs

[HttpPost]
[RequestSizeLimit(1073741824)]
[RequestFormLimits(MultipartBodyLengthLimit = 1073741824)]
public async Task<ActionResult> PostAsync(){
await Request.ReadFormAsync();
System.Diagnostics.Debug.WriteLine(Request.Form.Files.Count);
return Ok("Files uploaded.");
}

网络配置

<configuration>
    <system.webServer>
        <security>
            <requestFiltering>
                <!-- Handle requests up to 2 GB -->
                <requestLimits maxAllowedContentLength="2147483648" />
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>

启动.cs

 services.Configure<KestrelServerOptions>(options => { options.Limits.MaxRequestBodySize = null; });
 services.Configure<FormOptions>(options => 
            { options.MultipartBodyLengthLimit = 2147483648;
                options.ValueLengthLimit = 1073741824;
                options.MultipartHeadersLengthLimit = 1073741824;
               
            });

            services.Configure<IISServerOptions>(options =>
            {
                options.MaxRequestBodySize = null;
            });

启动文件当然还有其他配置,但这些是我为解决这个问题而添加的。我在这里先向您的帮助表示感谢!!
PS:如果需要任何其他信息,请告诉我。

标签: ajaxasp.net-coreiis-7

解决方案


您可以尝试在 Upload() 操作之上添加 [RequestFormLimits] 属性,如下所示:

[HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = 2147483648)]
public IActionResult Upload()
{
  ...
}

更多信息可以参考这个链接:https ://stackoverflow.com/a/62555240/13336642 。


推荐阅读